仅添加到字典中的一个列表

def stack_ov_test():
    my_set = set([1,2,1,3,4,3])
    my_dictionary = dict.fromkeys(my_set,[])
    my_dictionary[1].append(0)
    print(my_dictionary)  #  {1: [0],2: [0],3: [0],4: [0]}

我认为上面的代码是不言自明的,这就是为什么这让我如此困扰。 我只是想从集合/列表中创建一个字典,然后逐渐将数据添加到每个键列表中。在引用我想要附加到的列表时,字典中的所有列表都被修改。 有人可以解释一下我缺少什么吗? 非常感谢!

小编辑:

当我手动创建字典时,一切正常:

def stack_ov_test():
    my_dictionary = {1: [],2: [],3: []}
    my_dictionary[1].append(0)
    print(my_dictionary)  #  {1: [0],3: []}
congliangfa 回答:仅添加到字典中的一个列表

带有空列表参数的 fromkeys() 方法返回一个字典,其值指向完全相同的空列表,无论哪个键。这使得该方法不如此应用程序有用(并且让不少用户感到困惑)。

来自docs

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

手动创建字典时,您将空列表的不同副本分配给值。

首选方法是使用 dictionary comprehension

def stack_ov_test():
    my_set = set([1,2,1,3,4,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],4: []}

stack_ov_test()    
本文链接:https://www.f2er.com/1064563.html

大家都在问