Pythonで辞書のキーと値を逆にする方法と応用例

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で辞書のキーと値を逆にする方法には、状況に応じていくつかの選択肢があります。基本的な逆変換から、値がリストやタプルである場合、さらには逆変換でのキー衝突も考慮するケースまで、様々なケースで使える方法を紹介しました。

コメント

コメントする

目次