Python Language collections.defaultdict


collections.defaultdict (default_factory)は、欠落しているキーのデフォルト値を持つdictサブクラスを返します。引数は、引数なしで呼び出されたときにデフォルト値を返す関数でなければなりません。何も渡されなければ、デフォルトはNoneます。

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

default_factoryメソッドで文字列オブジェクトを作成するdefaultdictへの参照を返します。

defaultdictの典型的な使い方は、引数なしで呼び出されたときに空の型を返すため、 strintlistまたは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': ''})

default_factoryとしてlistを使用すると、新しいキーごとにリストが作成されます。

>>> 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']})