파이썬 딕셔너리 병합의 기본: ** 연산자 활용
파이썬 3.5 이상 버전에서는 ** 연산자를 사용해 딕셔너리를 언패킹(unpacking)하여 여러 개의 딕셔너리를 손쉽게 하나로 합칠 수 있습니다. 가장 간결하고 파이썬다운 방식으로, 실무에서도 널리 권장되는 문법입니다.
a = {'foo': 125}
b = {'bar': "hello"}
c = {**a, **b}
print(c)위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
{'foo': 125, 'bar': 'hello'}두 딕셔너리에 동일한 키가 존재할 경우, 뒤에 오는 딕셔너리(b)의 값이 앞선 딕셔너리(a)의 값을 덮어쓴다는 점을 기억해 두면 좋습니다.
구버전 파이썬에서 사용 가능한 dict() 함수 방식
** 연산자는 파이썬 3.5 미만 버전에서는 지원되지 않습니다. 구버전 환경이라면 dict() 함수를 활용한 유사한 문법으로 대체할 수 있습니다.
a = {'foo': 125}
b = {'bar': "hello"}
c = dict(a, **b)
print(c)실행 결과는 동일합니다.
{'foo': 125, 'bar': 'hello'}다만 이 방식은 키(key)가 반드시 문자열이어야 한다는 제약이 있으므로, 키가 문자열이 아닌 경우에는 주의가 필요합니다.
copy()와 update()를 조합한 병합 함수 만들기
또 하나의 안정적인 방법은 copy()와 update() 메서드를 조합하는 것입니다. 원본 딕셔너리를 변경하지 않고 새로운 딕셔너리를 반환하므로, 재사용 가능한 함수 형태로 만들어 두면 여러 곳에서 유용하게 활용할 수 있습니다.
def merge_dicts(x, y):
z = x.copy() # x의 키와 값으로 시작
z.update(y) # y의 키와 값으로 z를 갱신
return z
a = {'foo': 125}
b = {'bar': "hello"}
c = merge_dicts(a, b)
print(c)실행 결과는 다음과 같습니다.
{'foo': 125, 'bar': 'hello'}정리: 상황별 최적의 병합 방법
- 파이썬 3.5 이상:
{**a, **b}— 가장 간결하고 직관적인 방식 - 파이썬 3.9 이상:
a | b병합 연산자도 사용 가능 - 구버전 호환성 필요 시:
dict(a, **b)또는 copy/update 조합
각 방식마다 장단점이 있으므로, 프로젝트에서 사용 중인 파이썬 버전과 요구 사항에 맞는 방법을 선택하시기 바랍니다.