在使用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()
,我将如何做到这一点?
答案 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)
。