Python

実務で使える!Pythonの便利なcollectionsライブラリ!🐍

Python

実務でよく利用するcollectionsライブラリは圧倒的に以下の二つ

  • Counter
  • defaultdict

Counter

イテラブル(反復可能)のオブジェクトの要素と、その出現回数をマッピングするための便利なツール

l = [1, 1, 2, 1, 3, 2, 1, 3, 4, 5, 5, 4]

# 各要素がいくつあるのかを調べたい
# {1: 4, 2: 2, 3: 2, 4: 2, 5: 2} みたいな感じで求めたい

# Counterを利用しない場合
l_count = {}
for num in l:
	if num in l_count:
		l_count[num] += 1
	else:
		l_count[num] = 1

# Counterを利用する場合
from collections import Counter
l_count = Counter(l)


# Counterは文字列の各文字がいくつあるかもわかる
from collections import Counter
str_count = Counter("技術ブログ書きたい")
print(str_count)
=> Counter({'技': 1, '術': 1, 'ブ': 1, 'ロ': 1, 'グ': 1, '書': 1, 'き': 1, 'た': 1, 'い': 1})

defaultdict

存在しないキーを参照した際にデフォルト値が入った状態になっている辞書型風のデータ構造

文法的には辞書とほぼ同じだと思って問題ない

from collections import defaultdict
# defaultdictは以下のように定義
d = defaultdict(int)
# 存在しないKeyを指定してもKeyErrorが発生しない
print(d[0])
# => 0
print(d[1])
# => 0

d = {}
print(d[0])
# => KeyError: 0 となる

利用する場面としては以下のようなどのようなKeyが存在するかどうかわからないパターンで利用する

val_str = "djfklasjdflajfkla"
from collections import defaultdict
d = defaultdict(int)
for key in val_str:
    d[key] += 1

print(d)
# => defaultdict(<class 'int'>, {'d': 2, 'j': 3, 'f': 3, 'k': 2, 'l': 3, 'a': 3, 's': 1})
参考
collections --- コンテナデータ型
ソースコード: Lib/collections/__init__.py このモジュールは、汎用の Python 組み込みコンテナ dict, list, set, および tuple に代わる、特殊なコンテナデータ型を実装しています。,, ...

コメント