Python 3での辞書マッピングの逆転/反転

PYTHON3 チュートリアル

Python 3での辞書マッピングの逆転/反転について

Python 3におけるプログラミングでは、辞書(dictionary)はキーと値のペアを扱うのに非常に便利なデータ構造です。時には、これらのキーと値の関係を逆転させたい場面があります。この記事では、Python 3で辞書のキーと値を逆にマッピングする方法について、具体的な例と共に解説します。

基本的な逆転方法

最も単純な辞書の逆転方法は、新しい辞書を作成し、元の辞書のキーを値に、値をキーに設定することです。以下にその基本的な例を示します。

original_dict = {'a': 1, 'b': 2, 'c': 3}
inverted_dict = {value: key for key, value in original_dict.items()}
print(inverted_dict)

このコードの出力は以下の通りです。

{1: 'a', 2: 'b', 3: 'c'}

値が重複している場合の逆転

元の辞書の値が重複している場合、単純な逆転方法では最後のキーのみが新しい辞書に保存されます。値が重複している場合にすべてのキーを保存する方法は、値をキーとする新しい辞書にリストやセットとしてキーを格納することです。以下にその例を示します。

original_dict = {'a': 1, 'b': 2, 'c': 1}
inverted_dict = {}
for key, value in original_dict.items():
    if value not in inverted_dict:
        inverted_dict[value] = [key]
    else:
        inverted_dict[value].append(key)
print(inverted_dict)

このコードの出力は以下の通りです。

{1: ['a', 'c'], 2: ['b']}

collectionsモジュールを使用した逆転

上記のような重複値を扱う場合、Pythonのcollectionsモジュールのdefaultdictを使用すると、より簡潔に記述できます。defaultdictを使うと、初期値を自動的に設定できるため、存在しないキーに対する処理を書く必要がなくなります。以下にその例を示します。

from collections import defaultdict

original_dict = {'a': 1, 'b': 2, 'c': 1}
inverted_dict = defaultdict(list)
for key, value in original_dict.items():
    inverted_dict[value].append(key)
print(dict(inverted_dict))

このコードの出力は以下の通りです。

{1: ['a', 'c'], 2: ['b']}

逆転時の注意点

辞書を逆転させる際には、元の辞書の値がユニークであることを確認するか、値の重複を許容する方法を選択する必要があります。また、辞書の値がハッシュ可能であることも重要です。ハッシュ不可能な型(例えばリストや辞書自体など)をキーとして使用することはできません。

このように、Python 3で辞書を逆転する方法はいくつかありますが、使用する状況に応じて最適な方法を選ぶことが重要です。

購読
通知
0 Comments
Inline Feedbacks
View all comments