Symfoware

Symfowareについての考察blog

Python 件数のカウントにCounterオブジェクトを使用する

Pythonで件数をカウントするプログラムを書く場合、
辞書型を使用してこんな感じで記載していました。


  1. # -*- coding:utf-8 -*-
  2. words = ['a', 'b', 'c', 'd', 'a', 'a', 'a', 'b', 'b', 'c']
  3. words_count = {}
  4. for word in words:
  5.     words_count[word] = words_count.get(word, 0) + 1
  6. for word, cnt in words_count.items():
  7.     print word, cnt





$ python sample.py
a 4
c 2
b 3
d 1




ドキュメントを読んでいると、Counterオブジェクトという
そのものずばりのデータ型があります。

8.3. collections — 高性能なコンテナ・データ型



  1. # -*- coding:utf-8 -*-
  2. import collections
  3. words = ['a', 'b', 'c', 'd', 'a', 'a', 'a', 'b', 'b', 'c']
  4. words_count = collections.Counter()
  5. for word in words:
  6.     words_count[word] += 1
  7. for word, cnt in words_count.items():
  8.     print word, cnt




$ python sample.py
a 4
c 2
b 3
d 1




キーが存在しない場合は「0」が返されることが保証されているので、
シンプルに記載できます。


便利なのは「most_common」
数を数えた後の処理は、大体上位3件を表示とか
したい場合が多いと思います。

most_commonの引数に指定した件数分、
上位の結果を取得できます。


  1. # -*- coding:utf-8 -*-
  2. import collections
  3. words = ['a', 'b', 'c', 'd', 'a', 'a', 'a', 'b', 'b', 'c']
  4. words_count = collections.Counter()
  5. for word in words:
  6.     words_count[word] += 1
  7. for word, cnt in words_count.most_common(3):
  8.     print word, cnt





$ python sample.py
a 4
b 3
c 2




これは集計プログラムを作成するとき便利。



関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/06/21(日) 16:34:01|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Apache Spark 1.4 を Debian 8(Jessie)にインストールする | ホーム | Python イテレータ型を作成し、forやinが使えるオブジェクトを作成する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1732-a699eecf
この記事にトラックバックする(FC2ブログユーザー)