2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python初心者】collectionsモジュールの使い方まとめ(Counter / defaultdict / OrderedDict / namedtuple)

Posted at

collections モジュールの代表的なクラスの使い方を整理しました。
特に Counterdefaultdict は、初学者でもすぐに使える便利ツールです。

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 モジュールの中でも、実務や試験でよく登場するクラスについてまとめました。
特に Counterdefaultdict は日常的に使える場面が多く、コードがシンプルになるのでおすすめです。
namedtuple のような「意味をもたせたデータ構造」も知っておくと便利だと感じました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?