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


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

带空列表参数的fromkeys()方法返回一个字典,该字典的值指向完全相同的空列表,无论哪个键。这使得该方法在本应用程序中没有那么有用(并且使许多用户感到困惑)。

From the docs:

fromkeys()是一个返回新字典的类方法。value默认为"None"。所有的值都只引用一个实例,所以value作为一个可变对象(如空列表)通常是没有意义的。若要获得不同的值,请使用字典推导式。

手动创建字典时,将空列表的另一个副本赋值给values。

首选方法是使用字典推导式:

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()    

相关内容

  • 没有找到相关文章