Llama-2が登場!8bit+LoRAでRLHFファインチューニングを試す方法はこちら

【Python】collectionsでデータをよりスマートに管理しよう!

データの管理は、プログラミングをする上でとても重要です。
Pythonには、様々なデータを管理するためのモジュールが用意されています。これらのモジュールを使えば、よりスマートにデータを管理することができます。
今回は、データをよりスマートに管理できるようになる「collections」モジュールを紹介します。「collections」モジュールには、辞書やリストと同様に、様々なデータを格納することができるコンテナがあります。これらのコンテナを使えば、データをより効率的に管理することができます。
では、そのようなコンテナについて見ていきましょう。

pythonのバージョンによって機能などが異なる場合があります。
それぞれのバージョンにおける説明は、Pythonのドキュメントを参照してください。

目次

namedtuple

collections — namedtuple コンテナデータ型 — Python 3.11.0b5 ドキュメント

namedtupleは、タプルのように使えるデータ型で、要素をインデックス番号でアクセスするのではなく、フィールド名でアクセスできるようになります。例えば、次のように使います。

from collections import namedtuple

# 名前付きタプルを定義
Person = namedtuple('Person', ['name', 'age', 'gender'])

# 名前付きタプルを使ってインスタンスを作成
person1 = Person('Alice', 30, 'Female')
person2 = Person('Bob', 35, 'Male')

# 名前付きタプルのフィールドにアクセス
print(person1.name)  # Alice
print(person2.age)   # 35

こちらで詳しくまとめています。

あわせて読みたい
【collections.namedtuple】Pythonでタプルに名前をつける方法 本記事は、collections.namedtupleの基本的な使い方を解説しています。引数やメソッドなどの特徴を説明するためのコード例を作成しています。それらを参考にしながらnam...

deque

collections — deque コンテナデータ型 — Python 3.11.0b5 ドキュメント

dequeは、スタックやキューのようなデータ構造を実装するためのクラスです。要素の追加や削除を行う際に、リストよりも高速に処理ができるため、特に両端での要素の追加や削除を頻繁に行う場合に便利です。例えば、次のように使います。

from collections import deque

# dequeのインスタンスを作成
d = deque()

# 要素を追加
d.append('apple')
d.appendleft('banana')

# 要素を取り出す
print(d.pop())      # apple
print(d.popleft())  # banana
あわせて読みたい
【collections.deque】Pythonでリストよりも高速にデータを追加・削除する方法 本記事は、collections.dequeの基本的な使い方を解説しています。引数やメソッドなどの説明には、その特徴が分かるようなコード例があるので、参考にしながら機能を確認...

ChainMap

collections — ChainMap コンテナデータ型 — Python 3.11.0b5 ドキュメント

ChainMapは、複数のマップをまとめて、ひとつのマップのように扱えるようにするクラスです。複数のマップを連結して、ひとつのマップを表すことができるので、複数のマップを扱いやすくするために使われます。例えば、次のように使います。

from collections import ChainMap

# 複数の辞書を作成
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}

# ChainMapで複数の辞書をまとめる
cm = ChainMap(dict1, dict2)

# 辞書と同様に使用できる
print(cm['a'])  # 1
print(cm['c'])  # 3

# 辞書を更新すると、元の辞書も更新される
cm['a'] = 10
print(dict1['a'])  # 10
あわせて読みたい
【collections.ChainMap】Pythonで複数の辞書を1つにする簡単な方法 本記事は、collections.ChainMapの基本的な使い方を説明しています。特徴を分かりやすく説明するためのコード例もつけているので、参考にしながら動作を確認していただ...

Counter

collections — Counter コンテナデータ型 — Python 3.11.0b5 ドキュメント

Counterは、各要素の出現回数を計算するためのクラスです。文字列やリストなどのシーケンスデータから、各要素の出現回数をカウントして、辞書型のオブジェクトとして返すことができます。例えば、次のように使います。

from collections import Counter

# Counterのインスタンスを作成
c = Counter(['apple', 'banana', 'apple', 'orange', 'banana'])

# 要素の出現回数を取得
print(c['apple'])  # 2
print(c['banana']) # 2
print(c['orange']) # 1
あわせて読みたい
【collections.Counter】Pythonでリストや文字列の要素の出現回数を調べる方法 この記事では、collections.Counterの基本的な使い方を紹介しています。特徴を分かりやすく説明するためのコード例もつけているので、参考にしながら機能を確認してくだ...

OrderedDict

collections — OrderedDict コンテナデータ型 — Python 3.11.0b5 ドキュメント

OrderedDictは、要素を追加した順番を保持する辞書型のクラスです。通常の辞書では、要素を追加した順番は保持されませんが、OrderedDict では、要素を追加した順番を保持したままで、辞書と同じように使うことができます。例えば、次のように使います。

from collections import OrderedDict

# OrderedDictのインスタンスを作成
d = OrderedDict()

# 項目を追加
d['a'] = 1
d['b'] = 2
d['c'] = 3

# 項目を表示
for key, value in d.items():
    print(key, value)

# 出力:
# a 1
# b 2
# c 3

defaultdict

collections — defaultdict コンテナデータ型 — Python 3.11.0b5 ドキュメント

defaultdictは、辞書型のクラスです。通常の辞書では、存在しないキーを参照しようとすると KeyError が発生しますが、defaultdict では、存在しないキーを参照した場合に、事前に設定したデフォルトの値を返すようになります。これにより、辞書のキーが存在するかどうかを判定する必要がなくなり、コードがスッキリします。例えば、次のように使います。

from collections import defaultdict

# defaultdictのインスタンスを作成
d = defaultdict(int)

# 値を参照
print(d['a'])  # 0 (int関数が呼び出され、0が返される)

# 値を設定
d['b'] = 1
print(d['b'])  # 1

# キーが存在しない場合に、タプルを返すようにする
d = defaultdict(lambda: (0, 0))
print(d['c'])  # (0, 0) (lambda関数が呼び出され、(0, 0)が返される)

また、defaultdictでは、生成される値を返すための関数を指定することができます。上の例では、int関数やlambda関数を指定しています。

UserDict

collections — UserDict コンテナデータ型 — Python 3.11.0b5 ドキュメント

UserDictは、辞書型を継承することができるクラスです。辞書型を継承して、新しいクラスを作成することで、辞書型を拡張したり、カスタマイズすることができます。例えば、次のように使います。

from collections import UserDict

# UserDictを継承したクラスを作成
class MyDict(UserDict):
    pass

# MyDictのインスタンスを作成
d = MyDict()

# 辞書と同様に使用できる
d['a'] = 1
d['b'] = 2
print(d['a'])  # 1

UserList

collections — UserList コンテナデータ型 — Python 3.11.0b5 ドキュメント

UserListは、リスト型を継承することができるクラスです。リスト型を継承して、新しいクラスを作成することで、リスト型を拡張したり、カスタマイズすることができます。例えば、次のように使います。

from collections import UserList

# UserListを継承したクラスを作成
class MyList(UserList):
    pass

# MyListのインスタンスを作成
user_list = MyList()

# リストと同様に使用できる
user_list.append(1)
user_list.append(2)
print(user_list[0])  # 1

UserString

collections — UserString コンテナデータ型 — Python 3.11.0b5 ドキュメント

UserStringは、文字列型を継承することができるクラスです。文字列型を継承して、新しいクラスを作成することで、文字列型を拡張したり、カスタマイズすることができます。例えば、次のように使います。

from collections import UserString

# UserStringを継承したクラスを作成
class MyString(UserString):
    pass

# MyStringのインスタンスを作成
s = MyString('hello')

# 文字列と同様に使用できる
print(s.upper())  # HELLO

まとめ

「collections」モジュールを使えば、Pythonでデータをよりスマートに管理することができます。今回は、「collections」モジュールを使ったデータの管理方法を紹介しました。「Counter」、「defaultdict」、「OrderedDict」、「namedtuple」などの9つのコンテナを紹介しましたが、これらのコンテナを使えば、データをより効率的に管理することができます。また、使い方も辞書やリストと似ており、簡単に使うことができます。今後も、「collections」モジュールを使って、データの管理をスマートにしていきましょう。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次