提前致谢 我想更改字典中作为列表中项目的值
Python 2.6
goods1 = {'coal': 1, 'boxes': 2}
newcastlegoods = goods1
wylamgoods = goods1
goods1 = {}
Newcastle = ['Newcastle' , newcastlegoods]
Wylam = ['Wylam' , wylamgoods]
print Newcastle
print Wylam
Newcastle[1]['coal'] = 4;
print Newcastle
print Wylam
我的结果是
['Newcastle', {'coal': 1, 'boxes': 2}]
['Wylam', {'coal': 1, 'boxes': 2}]
['Newcastle', {'coal': 4, 'boxes': 2}]
['Wylam', {'coal': 4, 'boxes': 2}]
请注意,两个煤炭项目都已更新,我只想更新纽卡斯尔。
答案 0 :(得分:3)
确保您的列表包含原始字典的副本,而不是对其的引用。
goods1 = {'coal': 1, 'boxes': 2}
Newcastle = ['Newcastle' , dict(goods1)]
Wylam = ['Wylam' , dict(goods1)]
print Newcastle
print Wylam
Newcastle[1]['coal'] = 4;
print Newcastle
print Wylam
答案 1 :(得分:2)
您正在向两个列表添加相同的字典。当你改变一个时,它与改变另一个相同。
在这种情况下,您可以使用
绕过它newcastlegoods = goods1.copy()
wylamgoods = goods1.copy()
哪会为每个人创建一个新词典。
在这种情况下,这很好。如果在字典中放置可变对象,则需要查看深层副本,否则将在新字典中引用相同的对象。
答案 2 :(得分:1)
最好的方法是使用名为copy的包。如果您在此词典中有实例,那么唯一可以帮助您的是copy.deepcopy方法。 见https://docs.python.org/2/library/copy.html
答案 3 :(得分:0)
感谢所有人的快速反应 所有答案都有效!!!!! 我没想到货物1不是一个独立的副本。