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で辞書を逆転する方法はいくつかありますが、使用する状況に応じて最適な方法を選ぶことが重要です。