如何更改词典字典中的一个字典值

时间:2014-02-03 17:48:35

标签: python

我正在运行以下脚本的变体:

text1={'file1':0,'file2':0}
text2=['100-200','200-300','300-400']
text3=['1','2','3','4']
level1={}
level2={}
for i in text2:
    level1[i]=text1
for n in text3:
    level2[n]=level1
level2['3']['100-200']['file1']=level2['3']['100-200']['file1']+1

不幸的是,这会改变字典:

{'1': {'200-300': {'file2': 0, 'file1': 0}, '300-400': {'file2': 0, 'file1': 0}, '100-200': {'file2': 0, 'file1': 0}}, '2': {'200-300': {'file2': 0, 'file1': 0}, '300-400': {'file2': 0, 'file1': 0}, '100-200': {'file2': 0, 'file1': 0}}, '3': {'200-300': {'file2': 0, 'file1': 0}, '300-400': {'file2': 0, 'file1': 0}, '100-200': {'file2': 0, 'file1': 0}}, '4': {'200-300': {'file2': 0, 'file1': 0}, '300-400': {'file2': 0, 'file1': 0}, '100-200': {'file2': 0, 'file1': 0}}}

为:

{'1': {'200-300': {'file2': 0, 'file1': 1}, '300-400': {'file2': 0, 'file1': 1}, '100-200': {'file2': 0, 'file1': 1}}, '2': {'200-300': {'file2': 0, 'file1': 1}, '300-400': {'file2': 0, 'file1': 1}, '100-200': {'file2': 0, 'file1': 1}}, '3': {'200-300': {'file2': 0, 'file1': 1}, '300-400': {'file2': 0, 'file1': 1}, '100-200': {'file2': 0, 'file1': 1}}, '4': {'200-300': {'file2': 0, 'file1': 1}, '300-400': {'file2': 0, 'file1': 1}, '100-200': {'file2': 0, 'file1': 1}}}

如何只更改其中一个文件值而不是全部?

1 个答案:

答案 0 :(得分:1)

使用dict理解来生成你的结构,每次迭代都会计算循环表达式:

level2 = {n: {i: {'file1':0,'file2':0} for i in text2}} for n in text3}

您不是要创建字典的副本,只是存储对一个字典对象的引用。

因此,每次存储text1时,您都创建了引用,而不是副本,并且每次引用level1时都会相同。