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を試しに使ってみた。従来の辞書との使い方の比較。