具有空列表值的字典

Dictionary with values of empty list

我想创建一个键为 1、2、3、4 的字典 键的每个值都是 [].

n = [1,2,3,4]
d = dict.fromkeys(n, [])

d[1].append(777)

print(d)

--> {1: [777], 2: [777], 3: [777], 4: [777]}

为什么会这样?为什么这不是 {1: [777], 2: [], 3: [], 4: []} ?

您在第二步中用作值的列表都指向同一内存。因此,当您更新其中一个值时,所有值都会更新。

您可以使用以下命令检查 -

n = [1,2,3,4]
d = dict.fromkeys(n, [])

d[1] is d[2] #share memory

#True

因此,您可以通过一种方式执行以下操作 -

n = [1,2,3,4]
d = {k:[] for k in n}

d[1] is d[2]

#False

然后就可以设置了-

d[1].append(777)

{1: [777], 2: [], 3: [], 4: []}

更好的方法是使用 collections.defaultdict。这允许您使用 defaultdict(list) 创建一个默认值是 list 个对象的字典。它具有可扩展性,因为您可以选择需要字典值的数据类型。

from collections import defaultdict

n = [1,2,3,4]
d = defaultdict(list)

d[1].append(777)