collections
モジュールの代表的なクラスの使い方を整理しました。
特に Counter
や defaultdict
は、初学者でもすぐに使える便利ツールです。
Counter:リストや文字列の要素を数える
Counter
は、リストや文字列の中に「同じ値が何回あるか」を数えてくれるクラスです。
from collections import Counter
data = ["apple", "banana", "apple", "orange", "banana", "apple"]
counter = Counter(data)
print(counter)
実行結果:
Counter({'apple': 3, 'banana': 2, 'orange': 1})
-
apple
が3回、banana
が2回、orange
が1回登場しています - 出力は辞書のような形式ですが、
Counter
型です
よく使うメソッド:most_common()
よく登場する順に並べて、上位だけ取得できます。
print(counter.most_common(2)) # 上位2つを取得
実行結果:
[('apple', 3), ('banana', 2)]
defaultdict:キーがなくてもエラーにならない辞書
普通の辞書は、存在しないキーにアクセスするとエラーになります。
d = {}
# d["a"] += 1 # → KeyError が出る(理由:読み取り時に "a" がないため)
defaultdict
を使うと、キーが存在しなくても自動で初期値を作ってくれるので安全です。
from collections import defaultdict
dd = defaultdict(int) # int() は 0 を返す
dd["a"] += 1 # キー "a" が自動で作られて 0 + 1
dd["b"] += 2
print(dd)
実行結果:
defaultdict(<class 'int'>, {'a': 1, 'b': 2})
list や set を初期値にすることも可能
dd = defaultdict(list)
dd["fruits"].append("apple")
dd["fruits"].append("banana")
print(dd)
実行結果:
defaultdict(<class 'list'>, {'fruits': ['apple', 'banana']})
OrderedDict:登録順を保持する辞書
Python 3.6以降の dict
は順序を保持するようになりましたが、OrderedDict
は順序を明示的に扱いたいときに使います。
from collections import OrderedDict
od = OrderedDict()
od["one"] = 1
od["two"] = 2
od["three"] = 3
for k, v in od.items():
print(k, v)
実行結果:
one 1
two 2
three 3
- 登録した順番通りに出力されます
- 通常の辞書とほぼ同じように使えますが、順番が重要な場面では
OrderedDict
を使うと明示的で分かりやすいです
namedtuple:名前付きでアクセスできるタプル
🔰 普通のタプルだと分かりにくい…
p = (10, 20)
print(p[0]) # 10(xのつもり)
print(p[1]) # 20(yのつもり)
このように、普通のタプルは「番号」でアクセスするため、何が何の値かわかりづらくなります。
✅ namedtuple を使うと、意味のある名前でアクセスできる
from collections import namedtuple
# "x" と "y" という名前を持つ Point 型を定義
Point = namedtuple("Point", ["x", "y"])
# 位置情報を表すデータを作成
p = Point(10, 20)
# 名前付きでアクセスできる(わかりやすい!)
print(p.x) # 10
print(p.y) # 20
📌 解説:この1行の意味
Point = namedtuple("Point", ["x", "y"])
-
"Point"
:作成するクラス(型)の名前。見た目はクラスのように使える -
["x", "y"]
:その型が持つフィールド名(インデックスの代わりに使える名前)
この行は、**「xとyという名前を持つデータ構造(Point)を作る」**という宣言です。
🧠 補足:クラスよりもお手軽なデータ構造
namedtuple
は簡易的なクラスのようなものです。次のような特徴があります:
- 読み取り専用(値は変更できない)
- 軽量で高速
-
p[0]
でもp.x
でもアクセスできる
可読性がよくなるので、「意味のあるデータのかたまり」を簡単に表現したいときに便利です。
おわりに
今回は collections
モジュールの中でも、実務や試験でよく登場するクラスについてまとめました。
特に Counter
や defaultdict
は日常的に使える場面が多く、コードがシンプルになるのでおすすめです。
namedtuple
のような「意味をもたせたデータ構造」も知っておくと便利だと感じました。