defaultdictの基本的な使い方

Pythondefaultdictは、collectionsモジュールからインポートされる特別な辞書です。通常の辞書とは異なり、キーが存在しない場合にKeyErrorを発生させず、あらかじめ定義された初期値を返す機能を持ちます。

from collections import defaultdict
# 整数の初期値を持つdefaultdict
d = defaultdict(int)
d['a'] += 1  # 初期値0が設定され、結果として1が代入される

defaultdictの利便性

通常のdictでは、存在しないキーを参照するとKeyErrorが発生しますが、defaultdictはこれを回避します。以下の例では、リストを初期値として設定することで、各キーに対して複数の値を簡単に追加できます。

d = defaultdict(list)
d['colors'].append('red')  # 'colors'キーがない場合でも、空リストが初期値として作成される

defaultdictの応用例

defaultdictは、リストやカウンタ、セットなどを初期値として使う場面に適しており、複雑なデータ処理や集計をシンプルにすることができます。

s = [('apple', 1), ('banana', 2), ('apple', 3)]
d = defaultdict(list)
for k, v in s:
    d[k].append(v)
# 結果: {'apple': [1, 3], 'banana': [2]}

通常のdictとの違い

defaultdictと通常のdictの最大の違いは、キーが存在しない場合の挙動です。通常の辞書ではキーがないときにエラーを発生させますが、defaultdictは指定した初期値を自動的にセットします。

d = {}
# d['key']  # KeyErrorが発生する
dd = defaultdict(int)
print(dd['key'])  # 0が出力される

まとめ

defaultdictは、辞書に対して動的に初期値を設定する必要がある場合に非常に便利です。通常の辞書と比較して、コードがより簡潔でエラーハンドリングも軽減されるため、複雑な集計やリスト操作が必要な場面で有用です。場面に応じて、通常の辞書とdefaultdictを使い分けると良いでしょう。