collections.defaultdict

collections.defaultdict (default_factory)返回 dict 的子类,该子类具有缺失键的默认值。参数应该是一个在没有参数的情况下调用时返回默认值的函数。如果没有传递,则默认为 None

>>> state_capitals = collections.defaultdict(str)
>>> state_capitals
defaultdict(<class 'str'>, {})

返回对 defaultdict 的引用,该 defaultdict 将使用其 default_factory 方法创建一个字符串对象。

defaultdict 的一个典型用法是使用 strintlistdict 之类的内置类型作为 default_factory,因为这些在没有参数的情况下调用时返回空类型:

>>> str()
''
>>> int()
0
>>> list
[]

使用不存在的键调用 defaultdict 不会像在普通字典中那样产生错误。

>>> state_capitals['Alaska']
''
>>> state_capitals
defaultdict(<class 'str'>, {'Alaska': ''})

int 的另一个例子:

>>> fruit_counts = defaultdict(int)
>>> fruit_counts['apple'] += 2  # No errors should occur
>>> fruit_counts
default_dict(int, {'apple': 2})
>>> fruit_counts['banana']  # No errors should occur
0
>>> fruit_counts  # A new key is created
default_dict(int, {'apple': 2, 'banana': 0})

普通字典方法适用于默认字典

>>> state_capitals['Alabama'] = 'Montgomery'
>>> state_capitals
defaultdict(<class 'str'>, {'Alabama': 'Montgomery', 'Alaska': ''})

使用 list 作为 default_factory 将为每个新密钥创建一个列表。

>>> s = [('NC', 'Raleigh'), ('VA', 'Richmond'), ('WA', 'Seattle'), ('NC', 'Asheville')]
>>> dd = collections.defaultdict(list)
>>> for k, v in s:
...     dd[k].append(v)
>>> dd
defaultdict(<class 'list'>, 
    {'VA': ['Richmond'], 
     'NC': ['Raleigh', 'Asheville'], 
     'WA': ['Seattle']})