log

Python2.7のCounterを使ってみた

python2.7(2010年4月21日現在まだベータですが)で追加されるクラスの一つに Counter があります。
8.3. collections — Container datatypes — Python v3.4.0a0 documentation

その名の通り何かしらのデータをカウントするときに使えるクラスです。
例えば今までは

d = {}

d['foo'] = d.get('foo',0) + 1
d['bar'] = d.get('bar',0) + 1
d['foo'] = d.get('foo',0) + 1

for key,value in d.items():
    print key,value

なんて書いていたのが

from collections import Counter

c = Counter()

c['foo'] += 1
c['bar'] += 1
c['foo'] += 1

for key,value in c.items():
    print key,value

で済むようになります。
また、most_common()を使えば手軽にソートできます(上記リンクから参照)。

>>> # Find the ten most common words in Hamlet
>>> import re
>>> words = re.findall('\w+', open('hamlet.txt').read().lower())
>>> Counter(words).most_common(10)
[('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631),
 ('you', 554),  ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)]

今までのように辞書使ってると、一旦リストに変換して……とか面倒なステップを踏んでたのでこれはありがたいですね。

ちなみに、github に試しに作ったソースを載せました。
python2.7で追加されたCounterを試しに使ってみた。従来の辞書との使い方の比較。