更改一个键中的值会更改使用 fromkeys() 创建的集合字典中所有键的值

arm*_*min 3 python dictionary

我正在初始化这样的序列

seq = {'a', 'b', 'c', 'd', 'e'}
Run Code Online (Sandbox Code Playgroud)

现在我使用 fromkeys() 将序列转换为集合字典。这就是我正在做的事情:

val = set()
seq_dict =  dict.fromkeys(seq, val)
Run Code Online (Sandbox Code Playgroud)

现在看来,如果仅将一个元素添加到我的字典键集中之一,则该元素将被添加到所有其他集合中。这是示例:

seq_dict['a'].add("val1")
print(seq_dict)
{'d': {'val1'}, 'c': {'val1'}, 'b': {'val1'}, 'a': {'val1'}, 'e': {'val1'}}
Run Code Online (Sandbox Code Playgroud)

不确定我是否以正确的方式使用 fromkeys ?

mat*_*ini 5

fromkeys方法按预期工作,因为您得到了正确的结果:一个字典,其键是中的字符seq变量中的字符,每个值都是空集。

您的问题是由于您分配的值的可变性造成的:您为所有关键字分配了一个空集作为值。如果更改此 ( seq_dict['a'].add("val1")),则所有关键字的值都会更改(每个关键字引用原始空集)。

您可能需要使用字典理解(为每个键创建空集的新的不同副本)来避免此问题:

seq = {'a', 'b', 'c', 'd', 'e'}
seq_dict = {key: set() for key in seq}
Run Code Online (Sandbox Code Playgroud)