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}]
注意:变量字典初始化要和列表的添加元素句同等级