【競プロ】defaultdictとCounter
概要
データサイエンスに関する本を買ってみたものの、サイエンスするための基礎知識が圧倒的に足りておらず身が入らない始末。サイエンス関連のアウトプットはひとまず置いといて、「2章 Python速習コース」の中で競プロに役に立ちそうなテクニックをメモして、3,200円 + 税はムダじゃなかったと思いたいがための記事。
ゼロからはじめるデータサイエンス ―Pythonで学ぶ基本と実践
- 作者: Joel Grus,菊池彰
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/01/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
defaultdict
文字列やリストに含まれている要素の種類をカウントする時、defaultdictクラスを使うとシンプルに書ける。
from collections import defaultdict document = "zabbix" count_dict = defaultdict(int) # 引数は初期値(int()は0らしい) for cal in document: count_dict[cal] += 1 print(dict(count_dict)) # {'z': 1, 'a': 1, 'b': 2, 'i': 1, 'x': 1}
素で書くと、キーが既にある場合と新規の場合の両方を考慮しなくちゃならない。
# defaultdict使わない版 document = "zabbix" count_dict = {} for cal in document: if cal in count_dict: count_dict[cal] += 1 else: count_dict[cal] = 1 print(count_dict) # {'z': 1, 'a': 1, 'b': 2, 'i': 1, 'x': 1}
初期値はintだけではなく、dictや別の関数も指定可能。
Counter
defaultdictの「初期値指定できない代わりに短く書ける版」みたいな感じ。
from collections import Counter document = "zabbix" count_dict = Counter(document) print(dict(count_dict)) # {'z': 1, 'a': 1, 'b': 2, 'i': 1, 'x': 1}