首页 > 解决方案 > Python 字典的行为:fromkeys 与字典理解

问题描述

我对此感到恼火:

data = ["A:3", "X:-1", "X:2"]
pairs = [data[i].split(":") for i in range(len(data))]

现在这些对位于嵌套列表中,即:

In[49]: pairs
Out[49]: [['A', '3'], ['X', '-1'], ['X', '2']]

然后让我们用两种方法创建字典,它们应该是等效的:

dico1 = dict.fromkeys([pairs[i][0] for i in range(len(pairs))], [])
dico2 = {pairs[i][0]: [] for i in range(len(pairs))}

我们现在有这个:

dico1
Out[50]: {'A': [], 'X': []}
dico2
Out[51]: {'A': [], 'X': []}

然后让我们对两个 dicts 执行相同的处理:

for i in range(len(pairs)):
    dico1[pairs[i][0]].append(int(pairs[i][1]))
for i in range(len(pairs)):
    dico2[pairs[i][0]].append(int(pairs[i][1]))

然而,我有这个:

dico1
Out[54]: {'A': [3, -1, 2], 'X': [3, -1, 2]}
dico2
Out[55]: {'A': [3], 'X': [-1, 2]}

但为什么?

对我来说,预期的行为是dico2. 推荐的fromkeys方法?使用这种方法在幕后会发生什么?

我想内存内部存在差异,但有关此行为的更多信息将不胜感激。

标签: pythonpython-3.xdictionary

解决方案


推荐阅读