Python - 辞書の重複排除方法

次のように、辞書で重複した値を持つデータがある場合は、重複したデータを削除する方法を紹介します。

Original dict: {'a': 1, 'b': 2, 'c': 3, 'd': 2, 'e': 1}
Dict after removal: {'a': 1, 'b': 2, 'c': 3}

1. for loop(繰り返し文)でディクショナリ重複排除 (1)

for loopで実装する方法は難しくありません。まず、順番にdictを探索し、重複した値がある場合はフィルタリングして結果に登録しないようにします。

my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 2, 'e': 1}

seen = []
result = dict()
for key, val in my_dict.items():
    if val not in seen:
        seen.append(val)
        result[key] = val

print(f'Original dict: {my_dict}')
print(f'Dict after removal: {result}')

Output:

Original dict: {'a': 1, 'b': 2, 'c': 3, 'd': 2, 'e': 1}
Dict after removal: {'a': 1, 'b': 2, 'c': 3}

2. for loop(繰り返し文)で辞書重複を削除 (2)

上記と似ていますが、少し異なる方法で重複排除するコードを実装しました。

ディクショナリでkeyは同じですが、valueが異なる場合、 dict[key] = valueを実行すると更新されるという特徴を利用して以下のように実装しました。

上記のコードとの違いは、遅く検索されることが最終的に dict に追加されるデータになります。まず {value: key} の dict 形式で重複したものを削除し、そのデータを {key: value} に変換して dict にします。

my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 2, 'e': 1}

dict_no_dup = dict()
result = dict()
for key, val in my_dict.items():
    dict_no_dup[val] = key

for key, val in dict_no_dup.items():
    result[val] = key

Output:

Original dict: {'a': 1, 'b': 2, 'c': 3, 'd': 2, 'e': 1}
Dict after removal: {'e': 1, 'd': 2, 'c': 3}

このコードは、重複したデータがある場合、順序の前にあるデータが削除されます。

3. comprehensionによる辞書の重複排除

すぐ上でfor loopで実装したものをdict comprehensionとして実装することもできます。

my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 2, 'e': 1}
values = []
values = {val: key for key, val in my_dict.items()}
result = {val: key for key, val in values.items()}

print(f'Original dict: {my_dict}')
print(f'Dict after removal: {result}')

Output:

Original dict: {'a': 1, 'b': 2, 'c': 3, 'd': 2, 'e': 1}
Dict after removal: {'e': 1, 'd': 2, 'c': 3}

このコードは、重複したデータがある場合、順序の前にあるデータが削除されます。

Related Posts

codechachaCopyright ©2019 codechacha