在循环中用另一个字典填充列表时遇到问题:
当我修改字典的某些值时,列表总是取最新字典修改的值......我不明白为什么。
这是我的代码的一部分以提供帮助:
l = []
for k in dData.keys():
baseCourbe['name'] = k
baseCourbe['dataPoints'] = dData[k]
l.append(baseCourbe)
我的列表l
总是采用分配给的最后一个值baseCourbe
。
欢迎任何帮助!
在循环中用另一个字典填充列表时遇到问题:
当我修改字典的某些值时,列表总是取最新字典修改的值......我不明白为什么。
这是我的代码的一部分以提供帮助:
l = []
for k in dData.keys():
baseCourbe['name'] = k
baseCourbe['dataPoints'] = dData[k]
l.append(baseCourbe)
我的列表l
总是采用分配给的最后一个值baseCourbe
。
欢迎任何帮助!
当您附加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'}]
您正在使用同一个字典并一遍又一遍地修改它。就好像你正在这样做:
>>> 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}]
如果您希望字典不同,则必须复制它们,例如:
>>> 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)