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

Pythonで辞書から一意の値を抽出する方法

Pythonの辞書に格納された複数のリストから、重複を除いた一意の値(ユニークな値)を抽出したい場面はよくあります。そのような場合、辞書内包表記と sorted メソッドを組み合わせることで、簡潔かつ効率的に実現できます。

以下に具体的な実装例を示します。

サンプルコード

my_dict = {'hi' : [5,3,8, 0],
    'there' : [22, 51, 63, 77],
    'how' : [7, 0, 22],
    'are' : [12, 11, 45],
    'you' : [56, 31, 89, 90]}

print("辞書の内容:")
print(my_dict)

my_result = list(sorted({elem for val in my_dict.values() for elem in val}))

print("一意の値の一覧:")
print(my_result)

実行結果

辞書の内容:
{'hi': [5, 3, 8, 0], 'there': [22, 51, 63, 77], 'how': [7, 0, 22], 'are': [12, 11, 45], 'you': [56, 31, 89, 90]}
一意の値の一覧:
[0, 3, 5, 7, 8, 11, 12, 22, 31, 45, 51, 56, 63, 77, 89, 90]

処理の流れと解説

  • まず、各キーにリスト形式の値を持つ辞書を定義し、コンソールに表示します。

  • .values() メソッドを使って、辞書のすべての値(リスト)にアクセスします。

  • 辞書内包表記 {elem for val in my_dict.values() for elem in val} により、すべてのリストの要素を集合(set)として収集します。集合は重複を自動的に排除するため、この時点で一意の値だけが残ります。

  • sorted() 関数で要素を昇順に並べ替え、list() でリストに変換して変数に代入します。

  • 最後に、結果をコンソールに出力します。

補足:別のアプローチ

同様の処理は、itertools.chain を使って次のように書くこともできます。

from itertools import chain

my_result = sorted(set(chain.from_iterable(my_dict.values())))
print(my_result)

どちらの方法でも結果は同じですが、辞書内包表記を使う方法は追加のインポートが不要なため、シンプルなケースでは手軽です。データ量が多い場合や可読性を重視する場合は、chain を使う方法も検討するとよいでしょう。

  1. Pythonで辞書の値を更新する方法|update()メソッドの使い方を解説

    Pythonの組み込み型である辞書(dict)クラスには、update()メソッドが標準で用意されています。このメソッドは、別の辞書オブジェクトを引数として受け取り、呼び出し元の辞書にマージ(統合)することができます。 基本構文 D1.update(D2) 動作の仕組み D2の内容がD1に統合されます。このとき、キーの有無によって以下のように挙動が変わります。 D2のキーがD1にすでに存在する場合:そのキーの値がD2の値で上書き(更新)されます。 D2のキーがD1に存在しない場合:新しいキーと値のペアとしてD1に追加されます。 実行後、D1は更新された内容を保持します。 使用例 >&

  2. Pythonで辞書(dict)を値で並べ替える方法【OrderedDictとsorted()活用】

    Pythonで辞書を値順にソートする基本の考え方 Pythonの標準ライブラリには、高性能なコンテナデータ型を提供する collections モジュールが含まれています。その中の OrderedDict は辞書型のサブクラスで、要素が追加された順序を記憶できるのが特徴です。通常の dict もPython 3.7以降は挿入順を保持しますが、明示的に順序を扱いたい場面では OrderedDict が便利です。 OrderedDict をイテレートすると、キーが最初に追加された順序どおりにアイテムが返されます。 OrderedDictの基本的な使い方 >>> from coll