python在循环中将含变量的字典加到列表中(问题:如果写法不当,会导致最后赋值的变量覆盖列表中前面赋值的变量)

直观的栗子:

问题程序:

dict1={}
list1=[]
for va in range(5):
    dict1["num"]=va
    list1.append(dict1)

print(list1)

问题输出:

[{'num': 4}, {'num': 4}, {'num': 4}, {'num': 4}, {'num': 4}]

问题原因:个人理解是因为在循环中,加入列表的是变量地址,导致后面变量值变化后,地址上的值全部变化;如果程序里没有循环,那么没有这个问题,可能是循环的赋值机制问题导致

解决方法:把字典的定义放在循环内,相当于每次循环都赋了新地址

问题解决的程序:

list1=[]
for va in range(5):
    dict1 = {}
    dict1["num"]=va
    list1.append(dict1)

print(list1)

问题解决的输出:

[{'num': 0}, {'num': 1}, {'num': 2}, {'num': 3}, {'num': 4}]

 注意:变量字典初始化要和列表的添加元素句同等级

posted @ 2020-12-10 17:15  mghhz816  阅读(227)  评论(0编辑  收藏  举报