Python更改字典中的值,该字典是列表中的项

时间:2015-09-08 14:06:11

标签: python dictionary

提前致谢 我想更改字典中作为列表中项目的值

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}]

请注意,两个煤炭项目都已更新,我只想更新纽卡斯尔。

4 个答案:

答案 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不是一个独立的副本。