我在循环中用另一个字典填充列表时遇到问题:
当我修改字典的某些值时,列表总是采用最新字典修改的值...我不明白为什么。
以下是我的代码的一部分:
l = []
for k in dData.keys():
baseCourbe['name'] = k
baseCourbe['dataPoints'] = dData[k]
l.append(baseCourbe)
我的列表l
始终采用分配给baseCourbe
的最后一个值。
欢迎任何帮助!
答案 0 :(得分:1)
您正在使用相同的字典并一遍又一遍地修改它。就好像你这样做:
>>> d = {'sup': 100}
>>> l = [d, d, d, d]
>>> l
[{'sup': 100}, {'sup': 100}, {'sup': 100}, {'sup': 100}]
>>> l[0]['nom'] = 12
>>> l
[{'nom': 12, 'sup': 100}, {'nom': 12, 'sup': 100}, {'nom': 12, 'sup': 100}, {'nom': 12, 'sup': 100}]
如果您希望dicts不同,那么您必须复制它们,例如:
>>> d = {'sup': 100}
>>> l = [dict(d), dict(d), dict(d), dict(d)]
>>> l
[{'sup': 100}, {'sup': 100}, {'sup': 100}, {'sup': 100}]
>>> l[0]['nom'] = 12
>>> l
[{'nom': 12, 'sup': 100}, {'sup': 100}, {'sup': 100}, {'sup': 100}]
在代码的上下文中,您可能需要以下内容:
l = []
for name, points in dData.items():
baseCopy = dict(baseCourbe)
baseCopy['name'] = name
baseCopy['dataPoints'] = points
l.append(baseCopy)
答案 1 :(得分:1)
当您将baseCourbe
追加到l
时,您实际附加的内容是对baseCourbe
的引用。因此,当您更改baseCourbe
时,更改也会反映在l
的值中。
例如:
>>>test = {"a":1}
>>>test[2] = 5
>>>l = []
>>>l.append(test)
>>>print l
[{'a': 1, 2: 5}]
>>>test[5] = "abcd"
>>>print l
[{'a': 1, 2: 5, 5: 'abcd'}]