파이썬에서 딕셔너리의 키와 값을 반전(inverse)시켜야 하는 경우가 종종 있습니다. 특히 값이 리스트 형태로 저장된 딕셔너리라면, 각 값을 새로운 키로 삼고 그 값을 가지고 있던 원래의 키들을 리스트로 묶어주는 작업이 필요합니다.
이러한 작업은 간단한 반복문과 append 메서드만 사용하면 손쉽게 구현할 수 있습니다. 아래 예제를 통해 구체적인 방법을 살펴보겠습니다.
예제 코드
from collections import defaultdict
my_dict = {13: [12, 23], 22: [31], 34: [21], 44: [52, 31]}
print("The dictionary is :")
print(my_dict)
my_result = defaultdict(list)
for keys, values in my_dict.items():
for val in values:
my_result[val].append(keys)
print("The result is :")
print(dict(my_result))
실행 결과
The dictionary is :
{34: [21], 44: [52, 31], 13: [12, 23], 22: [31]}
The result is :
{52: [44], 31: [44, 22], 12: [13], 21: [34], 23: [13]}
코드 설명
collections모듈에서defaultdict를 임포트하여 환경에 불러옵니다.값이 리스트 형태인 딕셔너리를 정의하고 콘솔에 출력합니다.
defaultdict(list)를 사용해 빈 딕셔너리를 생성합니다.defaultdict를 사용하면 존재하지 않는 키에 접근할 때 자동으로 빈 리스트가 생성되므로,KeyError발생 없이 안전하게 데이터를 추가할 수 있다는 장점이 있습니다.items()메서드로 딕셔너리의 키와 값에 접근한 뒤, 중첩 반복문을 통해 각 요소를 순회합니다.append메서드를 사용해 리스트의 각 값을 새로운 키로 지정하고, 해당 값을 가지고 있던 원래의 키를 값으로 추가합니다.반복이 끝나면
defaultdict를 일반 딕셔너리(dict)로 변환하여 최종 결과를 콘솔에 출력합니다.
정리
이처럼 defaultdict와 반복문을 조합하면 복잡한 로직 없이도 딕셔너리의 키-값 관계를 손쉽게 반전시킬 수 있습니다. 값이 여러 개의 키와 연관된 데이터를 다룰 때 유용하게 활용할 수 있는 패턴이니, 실무에서 인덱스를 재구성하거나 매핑을 거꾸로 조회해야 할 때 참고해 보시기 바랍니다.