Python collections ライブラリ完全ガイド

Python 標準ライブラリの collections は、リストや辞書を拡張した高度なデータ構造を提供する強力なツールです。本記事では、collections の主要なコンポーネントとその実践的な使用例を詳しく解説します。
1. collections ライブラリの概要
collectionsは、Python の基本的なデータ構造(リスト、辞書、タプル)を拡張した特殊なデータ型を提供します。- データの整理や効率的な操作が可能になり、特に辞書の拡張機能が便利です。
- 主なコンポーネントには
Counter,defaultdict,OrderedDict,deque,namedtupleなどがあります。
インストール方法
collections は Python の標準ライブラリなので、追加のインストールは不要です。
import collections
2. 主な機能と使用例
(1) 要素の出現回数をカウント(Counter)
import collections text = "banana apple banana orange apple banana" word_count = collections.Counter(text.split()) print(word_count)
使用例: テキストデータの単語頻度分析や、リスト内の要素の出現回数を数える際に利用できます。
(2) デフォルト値を持つ辞書(defaultdict)
import collections default_dict = collections.defaultdict(int) words = ["apple", "banana", "apple", "orange", "banana", "apple"] for word in words: default_dict[word] += 1 print(default_dict)
使用例: キーが存在しない場合にデフォルト値を設定できるため、辞書の初期化を省略できます。
(3) 順序を保持する辞書(OrderedDict)
import collections ordered_dict = collections.OrderedDict() ordered_dict["banana"] = 3 ordered_dict["apple"] = 2 ordered_dict["orange"] = 1 print(ordered_dict)
使用例:
キーの順序が重要な場合に活用されます。Python 3.7 以降では通常の dict も順序を保持しますが、互換性を考慮して使用することがあります。
(4) 両端からの操作が可能なリスト(deque)
import collections deque_list = collections.deque(["apple", "banana", "orange"]) deque_list.append("grape") # 末尾に追加 deque_list.appendleft("cherry") # 先頭に追加 print(deque_list) # 先頭と末尾の要素を削除 deque_list.pop() deque_list.popleft() print(deque_list)
使用例: 高速なキューやスタックを実装する際に利用できます。
(5) 名前付きタプル(namedtuple)
import collections Person = collections.namedtuple("Person", ["name", "age", "city"]) user = Person("Alice", 25, "Tokyo") print(user.name, user.age, user.city)
使用例: 辞書のようにキーを指定しつつ、タプルのように変更不可なデータ構造を作成できます。
(6) 双方向辞書(ChainMap)
import collections dict1 = {"name": "Alice", "age": 25} dict2 = {"city": "Tokyo", "country": "Japan"} combined = collections.ChainMap(dict1, dict2) print(combined["name"], combined["city"]) # Alice Tokyo
使用例: 複数の辞書を統合し、一元的にアクセスする際に利用できます。
(7) ミュータブルな名前付きタプル(NamedTuple)
from collections import namedtuple Person = namedtuple("Person", ["name", "age", "city"]) p = Person("Bob", 30, "Osaka") print(p.name, p.age, p.city) # Bob 30 Osaka
使用例: 可読性が高く、フィールド名でアクセス可能なデータ構造を作成できます。
(8) リストを辞書にグループ化(defaultdict)
import collections data = [("fruit", "apple"), ("fruit", "banana"), ("veg", "carrot")] grouped = collections.defaultdict(list) for key, value in data: grouped[key].append(value) print(grouped) # {'fruit': ['apple', 'banana'], 'veg': ['carrot']}
使用例: カテゴリ別にデータを整理する際に便利です。
(9) deque を使用したスタック(LIFO)
import collections stack = collections.deque() stack.append("task1") stack.append("task2") print(stack.pop()) # task2
使用例: 後入れ先出し(LIFO)のデータ構造として利用できます。
(10) deque を使用したキュー(FIFO)
import collections queue = collections.deque() queue.append("task1") queue.append("task2") print(queue.popleft()) # task1
使用例: 先入れ先出し(FIFO)のデータ構造として利用できます。
3. collections の便利なデータ構造
| データ構造 | 説明 |
|---|---|
Counter |
要素の出現回数をカウントする |
defaultdict |
デフォルト値を持つ辞書 |
OrderedDict |
順序を保持する辞書 |
deque |
両端から操作できるリスト |
namedtuple |
名前付きタプル |
まとめ
Python の collections ライブラリは、より効率的なデータ管理を可能にする強力なツールです。リストや辞書の拡張機能を活用し、コードの可読性とパフォーマンスを向上させましょう! 🚀