Python - dictionary의 중복 제거 방법

다음과 같이 dictionary에서 중복된 value를 갖고 있는 데이터가 있을 때, 중복된 데이터를 제거하는 방법을 소개합니다.

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를 탐색하며 중복된 value가 있으면 필터링하여 result에 등록되지 못하도록 합니다.

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}

이 코드는 중복된 데이터가 있을 때, 순서가 앞에 있는 데이터가 삭제됩니다.

Loading script...

Related Posts

codechachaCopyright ©2019 codechacha