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

Python – 値がリストの2つの辞書をクロスマッピングする方法

値としてリストを持つ2つの辞書をクロスマッピング(相互参照)したい場合には、setdefaultメソッドとextendメソッドを組み合わせると簡潔に実装できます。

クロスマッピングとは

1つ目の辞書の各キーに紐づくリストの要素を「インデックス」として扱い、それを手がかりに2つ目の辞書から対応する値を取り出し、新しい辞書へまとめ直す処理のことです。

サンプルコード

以下に実行例を示します。

my_dict_1 = {"Python": [4, 7], "Fun": [8, 6]}
my_dict_2 = {6: [5, 7], 8: [3, 6], 7: [9, 8]}

print("1つ目の辞書:")
print(my_dict_1)

print("2つ目の辞書:")
print(my_dict_2)

sorted(my_dict_1.items(), key=lambda e: e[1][1])
print("ソート後の1つ目の辞書")
print(my_dict_1)

sorted(my_dict_2.items(), key=lambda e: e[1][1])
print("ソート後の2つ目の辞書")
print(my_dict_2)

my_result = {}
for key, value in my_dict_1.items():
    for index in value:
        my_result.setdefault(key, []).extend(my_dict_2.get(index, []))

print("結果の辞書:")
print(my_result)

実行結果

1つ目の辞書:
{'Python': [4, 7], 'Fun': [8, 6]}
2つ目の辞書:
{6: [5, 7], 8: [3, 6], 7: [9, 8]}
ソート後の1つ目の辞書
{'Python': [4, 7], 'Fun': [8, 6]}
ソート後の2つ目の辞書
{6: [5, 7], 8: [3, 6], 7: [9, 8]}
結果の辞書:
{'Python': [9, 8], 'Fun': [3, 6, 5, 7]}

コードの解説

  • まず、値としてリストを持つ2つの辞書を定義し、コンソールに表示します。

  • sorted()メソッドとlambda式を使って並べ替えを行っていますが、sorted()は元のオブジェクトを変更せず、ソート済みの新しいリストを返すため、このままでは辞書の順序は変化しません。元の辞書自体を並べ替えたい場合は、my_dict_1 = dict(sorted(my_dict_1.items(), key=lambda e: e[1][1])) のように結果を再代入する必要があります。

  • 結果を格納するための空の辞書を作成します。

  • 1つ目の辞書をforループで走査し、setdefault()によって各キーの初期値として空リストを設定します。

  • リスト内の各要素をインデックスとして2つ目の辞書から値を取得し(get()により、キーが存在しない場合は空リストが返されます)、extend()で結果の辞書へ連結していきます。

  • 最終的に、クロスマッピングされた結果の辞書がコンソールに出力されます。

ポイント:setdefaultとextendの役割

setdefault(key, [])は、指定したキーがまだ存在しない場合に第2引数の値(ここでは空リスト)をデフォルト値として登録し、その値を返すメソッドです。これにより、キーの存在チェックのためのif文を書く必要がなくなります。extend()は、リストの末尾に別のイテラブルの全要素を連結するメソッドで、複数のリストを1つにまとめる際に便利です。

  1. Pythonで辞書(dict)の最大値を取得する方法【values()とmax()の使い方】

    Pythonの組み込み型である辞書(dict)には、キーと値のペアから値だけを抽出できる values() メソッドが用意されています。このメソッドの戻り値に対して、組み込み関数 max() を使うことで、辞書内の最大値を簡単に取得できます。values()メソッドで値の一覧を取得するまず、values() メソッドを呼び出すと、辞書に含まれるすべての値が dict_values オブジェクトとして返されます。以下はその基本的な使用例です。>>> dct = {1: 45, 2: 76, 3: 12, 4: 55, 5: 33} >>> vlist = dc

  2. Pythonで辞書のキーに対応する値を更新する方法

    Python辞書の値の更新と追加の基本Pythonの辞書(dict)オブジェクトは、キーと値のペア(key:value)を格納するコレクションです。辞書オブジェクト d において、任意のキー k に関連付けられた値は、d[k] の形式で取得できます。>>> d={one:1, two:2,three:3,four:4} >>> d[two] 2代入による値の更新辞書の値を更新するには、d[k]=v という代入式を使用します。この式の動作は、指定したキーがすでに存在するかどうかによって変わります。既存のキーを指定した場合:そのキーに関連付けられた値が新しい値