Counter を試すことができます (Python 2.7 以降。2.7 より前のオプションについては以下を参照してください)。
>>> from collections import Counter
>>> Counter('abbba')
Counter({'b': 3, 'a': 2})
その後、辞書のように要素にアクセスできます。
>>> counts = Counter('abbba')
>>> counts['a']
2
>>> counts['b']
3
そして、反復するには、@ BurhanKhalidの提案を使用できます(Counter
キー/値のペアを反復できる辞書として動作します):
>>> for k, v in Counter('abbba').iteritems():
... print k, v
...
a 2
b 3
2.7 より前のバージョンの Python を使用している場合はdefaultdict
、コードを少し簡略化するために a を使用できます (プロセスは同じです。唯一の違いは、最初にキーをチェックする必要がないことです。'一致するキーが見つからない場合はデフォルトで 0 になります)。Counter
には他の機能が組み込まれていますが、単にカウントが必要な場合 (たとえば、 を気にしないmost_common
、またはできるsubtract
場合) は、これで問題なく、他の辞書と同じように扱うことができます。
>>> from collections import defaultdict
>>> counts = defaultdict(int)
>>> for c in 'abbba':
... counts[c] += 1
...
>>> counts
defaultdict(<type 'int'>, {'a': 2, 'b': 3})
iteritems()
辞書 (またはここではCounter
/ ) で使用defaultdict
すると、反復ごとにキーと値が返されます (この場合、キーは文字で、値は出現回数です)。'a', 'b', ...
辞書の使用について注意すべきことの 1 つは、辞書は本質的に順序付けされていないため、反復中に必ずしも得られるとは限らないということです。ソートされた方法でディクショナリを反復処理する基本的な方法の 1 つは、ソートされたキーのリスト (ここではアルファベット順ですがsorted
、さまざまなオプションを処理するために操作できます) を反復処理し、そのキーのディクショナリ値を返すことです (他の方法がありますが、これが多少の参考になることを願っています):
>>> mapping = {'some': 2, 'example': 3, 'words': 5}
>>> mapping
{'some': 2, 'example': 3, 'words': 5}
>>> for key in sorted(mapping.keys()):
... print key, mapping[key]
...
example 3
some 2
words 5