将整数附加到起始值为空列表的字典中

问题描述 投票:0回答:1

我有字典

my_dict = {'A': [], 'B': [], 'C': []}
并且正在尝试创建以下内容:
my_dict = {'A': [0,3,6], 'B': [1,4,7], 'C': [2,5,8]}
。这就是我设计的目的:

labels = ['A', 'B', 'C']

my_dict = dict.fromkeys(labels, [])

for i in range(3):
    for j in range(len(labels)):
        my_dict[labels[i]].append(3*j+i)

print(my_dict)

但是,

print(my_dict
) 给出以下结果:{'A': [0, 1, 2, 3, 4, 5, 6, 7, 8], 'B': [0, 1, 2, 3, 4 , 5, 6, 7, 8], 'C': [0, 1, 2, 3, 4, 5, 6, 7, 8]}.

谁能解释为什么会发生这种情况?您还可以提供一个解决方案,在该解决方案中,我可以将任意值附加到字典或任何带有标记列的数据结构中,就像我在这里所做的那样?

动机是我试图提取某些变量,例如“标签”,来自一个大型数据集,我不知道每个标签名称下有多少元素,因此我想使用追加。

python dictionary append
1个回答
0
投票

[]
中的
dict.fromkeys(labels, [])
仅运行一次,因此所有键都引用同一个列表。

来自 fromkey

docs
:“所有值都仅引用一个实例,因此 将值作为可变对象(例如空列表)通常没有意义。要获得不同的值值,请改用字典理解。”

列表理解看起来像这样:

labels = ['A', 'B', 'C']

my_dict = {label:[] for label in labels}

您也可以使用

defaultdict
:


from collections import defaultdict

labels = ['A', 'B', 'C']

my_dict = defaultdict(list)
© www.soinside.com 2019 - 2024. All rights reserved.