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

파이썬 ChainMap 완벽 가이드 – 여러 딕셔너리를 하나로 묶는 방법

파이썬의 ChainMap은 여러 개의 딕셔너리를 하나의 단위로 묶어서 관리할 수 있게 해주는 클래스입니다. 각각의 딕셔너리를 별도로 다루지 않고도 마치 하나의 딕셔너리처럼 조회하고 조작할 수 있어 코드가 훨씬 깔끔해집니다.

ChainMap은 파이썬 표준 라이브러리인 collections 모듈에 포함되어 있습니다. 따라서 사용하기 전에 먼저 해당 모듈을 임포트해야 합니다.

import collections

이 글에서는 ChainMap 클래스에서 자주 사용되는 주요 기능들을 예제와 함께 살펴보겠습니다.

maps 속성과 keys(), values() 메서드

maps 속성은 ChainMap에 포함된 모든 딕셔너리의 키-값 쌍 전체를 보여줍니다. keys() 메서드는 ChainMap에 있는 모든 키를 반환하며, values() 메서드는 각 키에 해당하는 값들을 반환합니다.

예제 코드

import collections as col
con_code1 = {'India' : 'IN', 'China' : 'CN'}
con_code2 = {'France' : 'FR', 'United Kingdom' : 'GB'}
chain = col.ChainMap(con_code1, con_code2)
print("Initial Chain: " + str(chain.maps))
print('The keys in the ChainMap: ' + str(list(chain.keys())))
print('The values in the ChainMap: ' + str(list(chain.values())))

실행 결과

Initial Chain: [{'India': 'IN', 'China': 'CN'}, {'France': 'FR', 'United Kingdom': 'GB'}]
The keys in the ChainMap: ['China', 'United Kingdom', 'India', 'France']
The values in the ChainMap: ['CN', 'GB', 'IN', 'FR']

위 결과에서 확인할 수 있듯이, 두 개의 딕셔너리가 하나의 ChainMap으로 연결되어 키와 값을 한 번에 조회할 수 있습니다.

new_child() 메서드와 reversed 함수

new_child() 메서드는 새로운 딕셔너리 객체를 ChainMap의 맨 앞에 추가할 때 사용합니다. 이렇게 추가된 딕셔너리는 검색 시 가장 우선순위가 높아집니다. 또한 내장 함수 reversed()를 활용하면 ChainMap 내부 딕셔너리들의 순서를 뒤집을 수도 있습니다.

예제 코드

import collections as col
con_code1 = {'India' : 'IN', 'China' : 'CN'}
con_code2 = {'France' : 'FR', 'United Kingdom' : 'GB'}
code = {'Japan' : 'JP'}
chain = col.ChainMap(con_code1, con_code2)
print("Initial Chain: " + str(chain.maps))
chain = chain.new_child(code)    #새로운 자식 딕셔너리 삽입
print("Chain after Inserting new Child: " + str(chain.maps))
chain.maps = reversed(chain.maps)
print("Reversed Chain: " + str(chain))

실행 결과

Initial Chain: [{'India': 'IN', 'China': 'CN'}, {'France': 'FR', 'United Kingdom': 'GB'}]
Chain after Inserting new Child: [{'Japan': 'JP'}, {'India': 'IN', 'China': 'CN'}, {'France': 'FR', 'United Kingdom': 'GB'}]
Reversed Chain: ChainMap({'France': 'FR', 'United Kingdom': 'GB'}, {'India': 'IN', 'China': 'CN'}, {'Japan': 'JP'})

new_child()를 호출한 후 출력 결과를 보면, 새로 추가된 {'Japan': 'JP'} 딕셔너리가 체인의 맨 앞에 위치하는 것을 알 수 있습니다. 이후 reversed()를 적용하면 딕셔너리들의 순서가 정확히 반대로 뒤집힙니다.

정리

ChainMap은 여러 딕셔너리를 논리적으로 하나로 묶어야 하는 상황에서 매우 유용한 도구입니다. 설정값 우선순위 관리, 기본값과 사용자 지정 값의 병합 등 다양한 실무 시나리오에서 활용할 수 있으니, 여러 딕셔너리를 다룰 일이 있다면 적극적으로 사용해 보시기 바랍니다.