Pythonには、dict
という辞書型が存在します。dict
は「key: value」の組を保持する型で、非常に便利なデータ構造です。しかし、dict
には一つ問題があります。それは、存在しないキーを参照しようとするとKeyError
が発生することです。
この問題を解決するために、Pythonにはdefaultdict
というデータ構造が用意されています。defaultdict
はdict
のサブクラスで、存在しないキーを参照したときにデフォルト値を返すことができます。
from collections import defaultdict
d = defaultdict(int)
for key in 'abcabc':
d[key] += 1
print(d) # defaultdict(<class 'int'>, {'a': 2, 'b': 2, 'c': 2})
上記のコードでは、defaultdict
の初期化時にint
関数を渡しています。これにより、存在しないキーを参照したときにint()
が呼び出され、その結果(0
)がデフォルト値として返されます。
また、defaultdict
の初期化時には任意の関数を渡すことができます。そのため、初期値が0でない場合や、初期値がリストや辞書などの複雑なデータ構造である場合でも、defaultdict
を利用することができます。
d = defaultdict(lambda: [0, 0])
d['a'][0] = 1
d['b'][1] = 2
print(d) # defaultdict(<function <lambda> at 0x10d5f60e0>, {'a': [1, 0], 'b': [0, 2]})
このように、defaultdict
はPythonのdict
をより強力で便利にするツールです。Pythonを使っているときに、KeyError
に悩まされることがあれば、defaultdict
の使用を検討してみてください。