使用dict.fromkeys(),将每个值分配给空字典

时间:2015-03-12 16:24:45

标签: python dictionary

在使用fromkeys()时,我在字典中创建空字典时遇到了一些问题。它们都链接到同一个。

这里有一些代码来展示我的意思:

a = dict.fromkeys( range( 3 ), {} )
for key in a:
    a[key][0] = key

我想要的输出就像a[0][0]=0, a[1][0]=1, a[2][0]=2,但它们都等于2,因为它正在编辑相同的dictionarionary 3次

如果我要定义像a = {0: {}, 1: {}, 2: {}}这样的词典,它可以正常工作,但如果您需要从更大的列表中构建它,那就不太实用了。

使用fromkeys,我尝试过{}dict()dict.copy()b={}; b.copy(),我将如何做到这一点?

2 个答案:

答案 0 :(得分:3)

问题是{}fromkeys的单个值,而不是工厂。因此,你得到的是单个可变dict,而不是单个副本。

defaultdict是创建具有内置工厂的字典的一种方法。

from collections import defaultdict as dd
from pprint import pprint as pp

a = dd(dict)
for key in range(3):
    a[key][0] = key

pp(a)

如果您想要更严格的评估,您需要使用字典理解或地图。

a = {key: {} for key in range(3)}

但是,如果你打算这样做,你也可以完成所有工作

a = {key: {0: key} for key in range(3)}

答案 1 :(得分:1)

只需遍历键并为每个键插入一个dict:

{k: {0: k} for k in keys}

此处,keys是可复制值的可迭代值,例如您的示例中的range(3)