如何从字典构造defaultdict?

Kar*_*ick 67 python dictionary

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

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

Joc*_*zel 77

阅读文档:

第一个参数提供default_factory属性的初始值; 它默认为None.所有剩余的参数都被视为传递给dict构造函数,包括关键字参数.

from collections import defaultdict
d=defaultdict(int, zip(range(1,10),range(50,61)))
Run Code Online (Sandbox Code Playgroud)

或者给一本字典d:

from collections import defaultdict
d=dict(zip(range(1,10),range(50,61)))
my_default_dict = defaultdict(int,d)
Run Code Online (Sandbox Code Playgroud)

  • 是否可以将这种方法扩展到嵌套字典?以下内容无法按预期工作:`default_dict = defaultdict(None,{“ a”:1,“ b”:{“ c”:3}}))例如`default_dict [“ e”]`引发KeyError而不是返回None (2认同)
  • @alancalvitti这是因为传递`None'并不意味着它将为未知密钥生成None,它将根本不使用任何密钥。您需要执行“ defaultdict(lambda:None,{....})” (2认同)

小智 6

通过将 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 )
Run Code Online (Sandbox Code Playgroud)

  • 您使用的是哪个版本的 Python?Python 3.8.3 中默认的 int val 是 0,而不是 1。 (2认同)