当键相同时,嵌套字典中键的Python设置值

时间:2020-07-08 20:22:37

标签: python dictionary

真的很简单,但是我似乎找不到任何答案。我有一本字典,其中包含一堆我用来存储配置的其他字典。每个嵌套字典都是从相同的模板创建的,因此键是相同的。尝试在其中一个中设置键时,所有嵌套词典中的相同键都会使用该值进行更新。

这是我正在做的事情的一个例子。

my_dict = {
    "bar": {
        "baz": None,
        "qux": None
    },
    "foo": {
        "baz": None,
        "qux": None
    }
}

my_dict['foo']['baz'] = True

然后字典看起来像这样,我不明白为什么? 我确信我之前也做过这种事情,这就是为什么它令人困惑的原因。

{
    "bar": {
        "baz": True,
        "qux": None
    },
    "foo": {
        "baz": True,
        "qux": None
    }
}

编辑

嵌套字典是使用如下模板创建的:

temp = {'baz': None,
        'qux': None}
 
my_dict['foo'] = temp
my_dict['bar'] = temp

任何帮助将不胜感激,谢谢

2 个答案:

答案 0 :(得分:0)

您需要使用copy方法来复制dict类型而不将它们彼此关联:

my_dict = {}

temp = {'baz': None,
        'qux': None}
 
my_dict['foo'] = temp.copy()
my_dict['bar'] = temp.copy()

print(my_dict)
my_dict['foo']['baz'] = True
print(my_dict)

输出:

{'bar': {'baz': None, 'qux': None},
 'foo': {'baz': None, 'qux': None}}

{'bar': {'baz': None, 'qux': None},
 'foo': {'baz': True, 'qux': None}}

注意:在这种情况下,您不需要两次调用.copy(),因为您没有在代码的其他地方使用temp。因此,只要您还有另一个使用.copy()的字典,就可以更改其内容。

答案 1 :(得分:0)

发生问题是因为您将 product = await page.evaluate(() => { let image = document.querySelector ("").src }); my_dict['foo']指向同一个对象。因此,一旦更改了该对象,两者的值都将更改。

除了Ann拥有的字典之外,您还可以尝试使用此字典:

my_dict['bar']

my_dict = {} temp = {'baz': None, 'qux': None} my_dict['foo'] = dict(temp) my_dict['bar'] = dict(temp) print(my_dict) my_dict['foo']['baz'] = True print(my_dict) 创建一个新的字典对象。

相关问题