Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで重複するキーを持つ辞書を作成する方法【defaultdict活用】

Pythonの辞書と重複キーの問題

Pythonの標準的な辞書(dict)では、同一のキーを重複して持つことができません。同じキーに対して再度値を代入すると、既存の値が上書きされてしまうためです。しかし、collectionsモジュールに定義されているdefaultdictクラスを利用すれば、この制限をうまく回避できます。

defaultdictとは

defaultdictは、存在しないキーにアクセスした際に、あらかじめ指定した「デフォルトファクトリ」を呼び出して初期値を自動生成する特殊な辞書です。デフォルトファクトリとしてlistを指定すると、未知のキーにアクセスした時点で空のリストが作成され、そこへ順次値を追加できるようになります。

手順1:defaultdictオブジェクトの作成

まず、collectionsモジュールからdefaultdictをインポートし、デフォルトファクトリとしてlistを指定してインスタンスを作成します。

>>> from collections import defaultdict
>>> d = defaultdict(list)

手順2:タプルのリストからデータを登録

次に、各要素が「キー」と「値」の2つの項目を持つタプルのリストを用意します。ここでは、先頭の項目(キー)が繰り返し登場するケースを想定しています。

>>> l = [(1, 111), (2, 222), (3, 333), (1, 'aaa'), (2, 'bbb'), (3, 'ccc')]
>>> for k, v in l:
...     d[k].append(v)

このループ処理では、d[k]にアクセスした時点で該当するキーが存在しなければ、自動的に空のリストが生成されます。そのため、append()メソッドでエラーなく値を追加していくことが可能です。

手順3:通常の辞書へ変換

最後に、dict()関数を使えば、defaultdictを通常の辞書オブジェクトへ変換できます。結果として、重複していたキーごとに値がリスト形式で整理され、見やすいデータ構造になります。

>>> dict(d)
{1: [111, 'aaa'], 2: [222, 'bbb'], 3: [333, 'ccc']}

まとめ

Pythonの辞書は仕様上キーの重複を許しませんが、defaultdictのデフォルトファクトリにlistを指定することで、同一キーの値をひとつのリストにまとめた辞書を簡単に構築できます。ログデータやグループ化処理など、キーが重複する可能性のあるデータを扱う際に非常に便利なテクニックなので、ぜひ覚えておきましょう。

  1. Pythonの辞書(dict)に新しいキーと値を追加する方法

    Pythonの辞書に新しいキーを追加する基本 Pythonの辞書(dict)は、キーと値のペアを格納するコレクションです。リストのような位置インデックスではなく、各要素はキーによって識別されます。また、同じキーを重複して持つことはできません。 そのため、新しいキー・値のペアを追加するのは非常に簡単です。存在しない新しいキーを指定し、そこに値を代入するだけで、自動的に新しいペアが辞書に追加されます。 コード例 >>> D1 = {1: a, 2: b, 3: c, x: 1, y: 2, z: 3} >>> D1[10] = z >>> D1

  2. Pythonで辞書をキー順に並べ替える方法【OrderedDictとsorted()の使い方】

    Pythonで辞書(dict)の要素をキーの順序に従って並べ替えたい場面はよくあります。この記事では、標準ライブラリのcollectionsモジュールに含まれるOrderedDictと、組み込み関数sorted()を組み合わせて、辞書をキー順にソートする方法を解説します。 OrderedDictとは Pythonの標準ディストリビューションには、高性能なコンテナデータ型を定義したcollectionsモジュールが含まれています。その中のOrderedDictは、辞書のサブクラスであり、要素が追加された順序を記憶する特徴を持っています。OrderedDictをイテレートすると、キーが最初に追加さ