defaultdict を使うのだ

collections.defaultdictを使うと要素のカウントがシンプルに書けるね。

# Python 2.5
from collections import defaultdict

d = defaultdict(int)
s = "abrakadabra"

# 文字別にカウント
for i in s:
    d[i] += 1

# 結果表示
for k, v in d.iteritems():
    print k, v

# 結果
# a 5
# r 2
# b 2
# k 1
# d 1

defaultdictの第1引数にはファクトリ関数を指定する。つまり「呼んだら新しいオブジェクトを戻り値として返すようなブツ」を入れろということだ。ビルトインなファクトリ関数には次のようなものがある:

>>> int()
0
>>> float()
0.0
>>> list()
[]
>>> set()
set([])

defaultdictの第1引数に0とか[]を直接指定しない理由はおそらく、listとかsetなどの可変(mutable)オブジェクトを指定されると、いちいちimport copy; copy.copy( )する必要が出てくるからだと思う。

ちなみにdefaultdictを使わないで書くと、いちいち値の存在を確認するか:

d = {}
s = "abrakadabra"

for i in s:
    if i in d:
        d[i] += 1
    else:
        d[i] = 1

getメソッドを使う羽目になる:

d = {}
s = "abrakadabra"

for i in s:
    d[i] = d.get(i, 0) + 1