【发布时间】:2011-11-24 05:51:34
【问题描述】:
如果我有d=dict(zip(range(1,10),range(50,61))),我如何从dict 中构建collections.defaultdict?
defaultdict 唯一的参数似乎是工厂函数,我是否必须初始化然后通过原始d 并更新defaultdict?
【问题讨论】:
标签: python dictionary
如果我有d=dict(zip(range(1,10),range(50,61))),我如何从dict 中构建collections.defaultdict?
defaultdict 唯一的参数似乎是工厂函数,我是否必须初始化然后通过原始d 并更新defaultdict?
【问题讨论】:
标签: python dictionary
您可以使用可调用对象创建带有字典的 defaultdict。
from collections import defaultdict
def dict_():
return {'foo': 1}
defaultdict_with_dict = defaultdict(dict_)
【讨论】:
您可以通过将 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 )
【讨论】:
第一个参数为 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)
【讨论】:
default_dict = defaultdict(None,{"a":1,"b":{"c":3}}) 例如default_dict["e"] 引发 KeyError 而不是返回 None
None 并不意味着它会为未知键生成 None,它根本不会使用一个。你需要做defaultdict(lambda: None, {....})