Python 仅添加到字典中的一个列表 def stack_ov_test(): 我的集合=集合([1,2,1,2,3,4,3,2,3]) my_dictionary=dict.fromkeys(my_集合,[])) 我的字典[1]。追加(0) 打印(我的字典){1:[0],2:[0],3:[0],4:[0]}

Python 仅添加到字典中的一个列表 def stack_ov_test(): 我的集合=集合([1,2,1,2,3,4,3,2,3]) my_dictionary=dict.fromkeys(my_集合,[])) 我的字典[1]。追加(0) 打印(我的字典){1:[0],2:[0],3:[0],4:[0]},python,dictionary,append,fromkeys,Python,Dictionary,Append,Fromkeys,我认为上面的代码几乎是不言自明的,这就是为什么这让我如此困扰的原因。 我只是想从一个集合/列表中创建一个字典,然后将数据逐渐添加到每个键列表中。当引用要附加到的列表时,字典中的所有列表都将被修改。 有人能解释一下我遗漏了什么吗? 多谢各位 小编辑: 手动创建词典时,一切正常: def stack_ov_test(): my_dictionary={1:[],2:[],3:[]} 我的字典[1]。追加(0) 打印(我的字典){1:[0],2:[],3:[]} 带有空列表参数的fromkeys()方

我认为上面的代码几乎是不言自明的,这就是为什么这让我如此困扰的原因。 我只是想从一个集合/列表中创建一个字典,然后将数据逐渐添加到每个键列表中。当引用要附加到的列表时,字典中的所有列表都将被修改。 有人能解释一下我遗漏了什么吗? 多谢各位

小编辑:

手动创建词典时,一切正常:

def stack_ov_test():
my_dictionary={1:[],2:[],3:[]}
我的字典[1]。追加(0)
打印(我的字典){1:[0],2:[],3:[]}
带有空列表参数的
fromkeys()
方法返回一个字典,其中的值指向完全相同的空列表,而不管是哪个键。这使得该方法没有它在该应用程序中可能发挥的作用(并且让更多的用户感到困惑)

从:

fromkeys()
是返回新字典的类方法。值默认为
None
。所有的值都只引用一个实例,所以将值设置为可变对象(如空列表)通常没有意义。要获得不同的值,请使用dict理解

手动创建字典时,可以将空列表的不同副本指定给值

首选方法是使用:


fromkeys()
对每个键使用相同的对象。它不会创建新的objectuse
collections.defaultdict(list)
而不是为什么不能使用
defaultdict
?或者使用字典理解这对我有用!非常感谢你。
def stack_ov_test():
    my_set = set([1, 2, 1, 2, 3, 4, 3, 2, 3])
    my_dict = {k: [] for k in my_set}
    print(my_dict) # {1: [], 2: [], 3: [], 4: []}
    my_dict[1].append(0)
    print(my_dict)  # {1: [0], 2: [], 3: [], 4: []}

stack_ov_test()