如何从字典构造一个defaultdict?


84

如果我有d=dict(zip(range(1,10),range(50,61)))我怎样才能建立一个collections.defaultdict出来的dict

defaultdict似乎采用的唯一参数是工厂函数,我是否必须先初始化然后再通过原始函数d并更新defaultdict

Answers:


96

阅读文档

第一个参数提供default_factory属性的初始值;它默认为无。其余所有参数都与传递给dict构造函数一样,包括关键字参数。

from collections import defaultdict
d=defaultdict(int, zip(range(1,10),range(50,61)))

或给出字典d

from collections import defaultdict
d=dict(zip(range(1,10),range(50,61)))
my_default_dict = defaultdict(int,d)

3
是否可以将这种方法扩展到嵌套字典?以下内容无法按预期工作:default_dict = defaultdict(None,{"a":1,"b":{"c":3}})例如,default_dict["e"]引发
KeyError

4
@alancalvitti是因为传递None并不意味着它将为未知密钥生成None,它将根本不使用任何密钥。您需要做defaultdict(lambda: None, {....})
Eric Darchis

1

您可以通过将dict作为第二个参数传递来从dict构造一个defaultdict。

from collections import defaultdict

d1 = {'foo': 17}
d2 = defaultdict(int, d1)

print(d2['foo'])  ## should print 17
print(d2['bar'])  ## should print 1 (default int val )

0

defaultdict 是集合中的一种方法,当元素不存在时不会返回键错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.