Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Python辞典

  1. トップページ
  2. Python辞典
  3. collections.Counter()

collections.Counter()

『Counter』はリストや文字列などのイテラブルの要素の出現回数を集計する辞書のサブクラスです。頻度分析やランキング処理に使います。

構文
from collections import Counter

# イテラブルから Counter を生成します。
c = Counter(イテラブル)

# 最も多い要素をn件取得します。
c.most_common(n)

# 全要素を出現回数分繰り返すイテレータを返します。
c.elements()

# Counter 同士の演算
c1 + c2  # 各カウントを加算します。
c1 - c2  # 各カウントを減算します(0以下は除外)。
c1 & c2  # 各カウントの小さい方を取ります。
c1 | c2  # 各カウントの大きい方を取ります。
メソッド・演算子一覧
メソッド / 演算子概要
Counter(イテラブル)イテラブルの要素を集計して、各要素の出現回数を値とする辞書を生成します。
c.most_common(n)出現回数の多い順にn件を『[(要素, 回数), ...]』のリストで返します。nを省略すると全件を返します。
c.elements()各要素を出現回数分繰り返すイテレータを返します。カウントが1未満の要素は含まれません。
c.update(イテラブル)新しいイテラブルのカウントを既存の Counter に加算します。
c.subtract(イテラブル)新しいイテラブルのカウントを既存の Counter から減算します。負の値も保持されます。
c1 + c22つの Counter のカウントを加算した新しい Counter を返します。
c1 - c2c1からc2のカウントを引いた Counter を返します(正の値のみ保持)。
サンプルコード
from collections import Counter

# リストの要素を集計します。
fruits = ['apple', 'banana', 'apple', 'cherry', 'banana', 'apple']
c = Counter(fruits)
print(c)  # 『Counter({'apple': 3, 'banana': 2, 'cherry': 1})』と出力されます。

# 辞書のように要素ごとのカウントにアクセスします。
print(c['apple'])   # 『3』と出力されます。
print(c['grape'])   # 存在しないキーは『0』を返します(KeyError なし)。

# most_common() で頻度上位n件を取得します。
print(c.most_common(2))  # 『[('apple', 3), ('banana', 2)]』と出力されます。

# 文字列の文字頻度を集計します。
text = 'programming'
char_count = Counter(text)
print(char_count.most_common(3))
# 最も多い文字3件が出力されます(例: 『[('g', 2), ('r', 2), ('m', 2)]』)。

# update() でカウントを追加します。
more_fruits = ['apple', 'grape', 'grape']
c.update(more_fruits)
print(c['apple'])  # 『4』と出力されます。
print(c['grape'])  # 『2』と出力されます。

# Counter 同士の演算
c1 = Counter({'a': 3, 'b': 2})
c2 = Counter({'a': 1, 'c': 4})
print(c1 + c2)  # 『Counter({'c': 4, 'a': 4, 'b': 2})』と出力されます。
print(c1 - c2)  # 『Counter({'a': 2, 'b': 2})』(正の値のみ)と出力されます。
print(c1 & c2)  # 『Counter({'a': 1})』(小さい方)と出力されます。
print(c1 | c2)  # 『Counter({'c': 4, 'a': 3, 'b': 2})』(大きい方)と出力されます。

# elements() で要素を繰り返し展開します。
print(sorted(c1.elements()))  # 『['a', 'a', 'a', 'b', 'b']』と出力されます。
概要

『Counter』は辞書のサブクラスなので、辞書のメソッド(『keys()』、『values()』、『items()』など)もそのまま使えます。存在しないキーを参照した場合に『KeyError』が発生せず『0』を返す点が通常の辞書と異なります。

アンケート集計・テキスト解析・ログの頻度分析など、「どの要素が何回登場するか」を調べる処理をシンプルに書けます。

Counter同士の減算(『-』演算子)は結果が0以下の要素を除外しますが、『subtract()』メソッドは負の値も保持します。用途に応じて使い分けてください。

デフォルト値付き辞書は『collections.defaultdict()』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。