如何覆盖Python命令中的值?
我举了一个例子:如何覆盖Python命令中的值?,python,dictionary,Python,Dictionary,我举了一个例子: d = {} x = {'key1': 'value1', 'key2': 'value2'} above = ['abovekey1', 'abovekey2'] for ak in above: d[ak] = x d[ak]['key2'] = str(ak) d的输出为: {'abovekey1': {'key1': 'value1', 'key2': 'abovekey2'}, 'abovekey2
d = {}
x = {'key1': 'value1', 'key2': 'value2'}
above = ['abovekey1', 'abovekey2']
for ak in above:
d[ak] = x
d[ak]['key2'] = str(ak)
d的输出为:
{'abovekey1': {'key1': 'value1', 'key2': 'abovekey2'},
'abovekey2': {'key1': 'value1', 'key2': 'abovekey2'}}
但我编写的代码期望得到这样的输出:
{'abovekey1': {'key1': 'value1', 'key2': 'abovekey1'},
'abovekey2': {'key1': 'value1', 'key2': 'abovekey2'}}
如何更改代码以生成我期望的输出,以及在上面的示例中缺少什么
谢谢大家! 如注释中所述,
d[ak]=x
引用同一词典。您可以通过制作x
的副本来获得所需的结果:
x = {'key1': 'value1', 'key2': 'value2'}
above = ['abovekey1', 'abovekey2']
d = {k: dict(x, key2=k) for k in above}
print(d)
印刷品:
{'abovekey1': {'key1': 'value1', 'key2': 'abovekey1'}, 'abovekey2': {'key1': 'value1', 'key2': 'abovekey2'}}
您需要复制一份
x
使用.copy
Ex:
d = {}
x = {'key1': 'value1', 'key2': 'value2'}
above = ['abovekey1', 'abovekey2']
for ak in above:
d[ak] = x.copy()
d[ak]['key2'] = ak
print(d)
{'abovekey1': {'key1': 'value1', 'key2': 'abovekey1'},
'abovekey2': {'key1': 'value1', 'key2': 'abovekey2'}}
输出:
d = {}
x = {'key1': 'value1', 'key2': 'value2'}
above = ['abovekey1', 'abovekey2']
for ak in above:
d[ak] = x.copy()
d[ak]['key2'] = ak
print(d)
{'abovekey1': {'key1': 'value1', 'key2': 'abovekey1'},
'abovekey2': {'key1': 'value1', 'key2': 'abovekey2'}}
在python中,对象从不隐式复制,而是被引用。如果要编辑单独的词典,需要先复制它 注意:
.copy()
操作会生成字典的浅拷贝。如果您的字典有更多层次结构级别/嵌套目录,并且您希望复制所有这些目录,则需要使用.deepcopy()
进行深度复制。为此,您需要先导入它
from copy import deepcopy
有关浅拷贝与深拷贝的更多信息,请参阅。您在
d
内放置了对x
的多个引用。如果你想让它们不同,你就要把x
复制到d
中。难以置信,我永远也找不到解决方案。由于我正在使用嵌套dict,我需要一个deepcopy,并在这里找到了解决方案: