2

在循环中用另一个字典填充列表时遇到问题:

当我修改字典的某些值时,列表总是取最新字典修改的值......我不明白为什么。

这是我的代码的一部分以提供帮助:

l = []
for k in dData.keys():
    baseCourbe['name'] = k
    baseCourbe['dataPoints'] = dData[k]
    l.append(baseCourbe)

我的列表l总是采用分配给的最后一个值baseCourbe

欢迎任何帮助!

4

2 回答 2

1

当您附加baseCourbel时,您实际上附加的是对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'}]
于 2013-10-10T16:00:50.840 回答
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}]

如果您希望字典不同,则必须复制它们,例如:

>>> 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)
于 2013-10-10T15:56:39.227 回答