如何覆盖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,并在这里找到了解决方案: