collections.defaultdict
collections.defaultdict (default_factory)返回 dict
的子類,該子類具有缺失鍵的預設值。引數應該是一個在沒有引數的情況下呼叫時返回預設值的函式。如果沒有傳遞,則預設為 None
。
>>> state_capitals = collections.defaultdict(str)
>>> state_capitals
defaultdict(<class 'str'>, {})
返回對 defaultdict 的引用,該 defaultdict 將使用其 default_factory 方法建立一個字串物件。
defaultdict
的一個典型用法是使用 str
,int
,list
或 dict
之類的內建型別作為 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']})