Pythonにおいて、辞書のキーと値を逆にするという処理は一見単純なようで、実際には多くのケースで便利です。この記事では、その処理の具体的なコード例とその解説、応用例を含めて詳しく説明します。
基本の方法
Pythonで辞書のキーと値を逆にする最も単純な方法を示します。
基本コード
original_dict = {'apple': 1, 'banana': 2, 'cherry': 3}
reversed_dict = {v: k for k, v in original_dict.items()}
print(reversed_dict)
このコードで出力される辞書は `{‘1’: ‘apple’, ‘2’: ‘banana’, ‘3’: ‘cherry’}` となります。
解説
– `original_dict`は、逆にする前のオリジナルの辞書です。
– 辞書内包表記 `{v: k for k, v in original_dict.items()}` によって、新しい辞書`reversed_dict`が作成されます。
– `items()`メソッドを使用して、辞書のキーと値のペアを取得します。
– ループ内でキー(`k`)と値(`v`)を入れ替えて、新しい辞書に代入しています。
応用例
例1: 値がリストやタプルの場合
original_dict = {'apple': [1, 2], 'banana': [2, 3], 'cherry': [3, 4]}
reversed_dict = {v: k for k, lst in original_dict.items() for v in lst}
print(reversed_dict)
このコードで出力される辞書は `{‘1’: ‘apple’, ‘2’: ‘banana’, ‘3’: ‘cherry’}` となります。
解説
– `original_dict`の各キーに対する値がリストまたはタプルになっている場合。
– 二重のforループを使用して、リスト内の各要素を新しいキーとして逆にします。
例2: 逆変換に際しての衝突の処理
original_dict = {'apple': 1, 'banana': 1, 'cherry': 3}
reversed_dict = {}
for k, v in original_dict.items():
if v not in reversed_dict:
reversed_dict[v] = [k]
else:
reversed_dict[v].append(k)
print(reversed_dict)
このコードで出力される辞書は `{‘1’: [‘apple’, ‘banana’], ‘3’: [‘cherry’]}` となります。
解説
– キーと値を逆にする際に、同じ値が複数のキーに関連づけられている可能性があります。
– このような場合、逆変換の際にキーの衝突が発生する可能性があります。
– 衝突が発生した場合、値をリストとして格納して衝突を解消します。
例3: 値がリストで、逆変換で衝突も考慮するケース
original_dict = {'apple': [1, 2], 'banana': [2, 3]}
reversed_dict = {}
for k, lst in original_dict.items():
for v in lst:
if v not in reversed_dict:
reversed_dict[v] = [k]
else:
reversed_dict[v].append(k)
print(reversed_dict)
このコードで出力される辞書は `{‘1’: [‘apple’], ‘2’: [‘apple’, ‘banana’], ‘3’: [‘banana’]}` となります。
解説
– `original_dict`の各キーに対する値がリストであり、さらに逆変換で衝突も考慮する必要があります。
– このようなケースでは、二重のforループとif文を使用して、衝突を解消しながら逆変換を行います。
まとめ
Pythonで辞書のキーと値を逆にする方法には、状況に応じていくつかの選択肢があります。基本的な逆変換から、値がリストやタプルである場合、さらには逆変換でのキー衝突も考慮するケースまで、様々なケースで使える方法を紹介しました。
コメント