Python - dictionary의 중복 제거 방법

By JS | Last updated: January 03, 2021

다음과 같이 dictionary에서 중복된 value를 갖고 있는 데이터가 있을 때, 이 중복된 데이터를 제거할 수 있습니다.

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

중복된 데이터를 삭제하는 방법을 소개합니다.

  • for loop를 이용한 방법
  • dict comprehension을 이용한 방법

for loop를 이용한 방법

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}

다른 방법

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}

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

dict 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