Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python – 두 딕셔너리 값 목록의 교차 매핑 방법

개요

두 개의 딕셔너리 값 목록(value list)을 서로 교차 매핑(cross-map)해야 하는 경우, 'setdefault' 메서드와 'extend' 메서드를 활용하면 간단하게 처리할 수 있습니다.

예제 코드

아래는 두 딕셔너리를 교차 매핑하는 전체 예제입니다.

my_dict_1 = {"Python" : [4, 7], "Fun" : [8, 6]}
my_dict_2 = {6 : [5, 7], 8 : [3, 6], 7 : [9, 8]}

print("첫 번째 딕셔너리 : ")
print(my_dict_1)

print("두 번째 딕셔너리 : ")
print(my_dict_2)

sorted(my_dict_1.items(), key=lambda e: e[1][1])
print("정렬 후 첫 번째 딕셔너리 ")
print(my_dict_1)

sorted(my_dict_2.items(), key=lambda e: e[1][1])
print("정렬 후 두 번째 딕셔너리 ")
print(my_dict_2)

my_result = {}
for key, value in my_dict_1.items():
   for index in value:
      my_result.setdefault(key, []).extend(my_dict_2.get(index, []))

print("결과 딕셔너리 : ")
print(my_result)

실행 결과

첫 번째 딕셔너리 :
{'Python': [4, 7], 'Fun': [8, 6]}
두 번째 딕셔너리 :
{6: [5, 7], 8: [3, 6], 7: [9, 8]}
정렬 후 첫 번째 딕셔너리
{'Python': [4, 7], 'Fun': [8, 6]}
정렬 후 두 번째 딕셔너리
{6: [5, 7], 8: [3, 6], 7: [9, 8]}
결과 딕셔너리 :
{'Python': [9, 8], 'Fun': [3, 6, 5, 7]}

코드 설명

  • 먼저 두 개의 딕셔너리를 정의하고 콘솔에 출력합니다.

  • 'sorted' 메서드와 람다(lambda) 함수를 사용해 각 딕셔너리를 정렬한 뒤 결과를 출력합니다.

  • 결과를 저장할 빈 딕셔너리 my_result를 생성합니다.

  • 첫 번째 딕셔너리를 순회하면서 'setdefault' 메서드로 각 키의 기본값을 빈 리스트로 설정합니다.

  • 값 목록의 각 요소를 인덱스 삼아 두 번째 딕셔너리에서 해당 값을 조회한 후, 'extend' 메서드를 사용해 결과 딕셔너리에 추가합니다.

  • 마지막으로 최종 결과 딕셔너리를 콘솔에 출력합니다.

참고 사항

파이썬의 sorted() 함수는 원본 객체를 변경하지 않고 정렬된 새 리스트를 반환합니다. 따라서 위 예제에서 정렬 결과를 변수에 할당하지 않으면 원본 딕셔너리는 그대로 유지됩니다. 만약 정렬된 결과를 실제로 사용하려면 다음과 같이 반환값을 저장해야 합니다.

sorted_dict_1 = dict(sorted(my_dict_1.items(), key=lambda e: e[1][1]))

또한 'setdefault(key, [])'는 해당 키가 존재하지 않을 때만 빈 리스트를 생성해 주기 때문에, 별도의 조건문 없이 안전하게 값을 누적할 수 있다는 장점이 있습니다.