defaultdict
がない¶
Python の基本的なデータ構造の1つに dict
(辞書) があります。
dict
は別名マッピングとも呼ばれ、キーに対して値を紐付けて登録することができます。
>>> d = {"one": 1, "two": 2}
>>> d["three"] = 3
>>> d["one"]
1
>>> d["zero"]
Traceback (most recent call last):
File "<stdin>", line 1, in ?
KeyError: 'zero'
上記の例の最後のように、存在しないキーを参照すると例外が発生します。
これを踏まえて、ある文字列中にそれぞれの文字が何回出現したかを数える プログラムを書いてみましょう。
s = "abrakadabra"
d = {}
for c in s:
# d[c] += 1 としたいが、これだと最初に代入するときにエラーになる
d[c] = d.get(c, 0) + 1
存在しないキーを参照した時のことをいちいち考えて書かないといけないので面倒です (間違いが多くなります)。
defaultdict
を使えばすっきり書けます。
from collections import defaultdict
s = "abrakadabra"
d = defaultdict(int)
for c in s:
d[c] += 1
collections
モジュールに defaultdict
が追加されたのは
Python 2.5 からなので、 Python 2.4 では使えません。
Note