파이썬에서 두 개의 딕셔너리(dictionary)를 하나로 합치는 작업은 실무에서 매우 자주 사용됩니다. 버전에 따라 여러 가지 방법이 있으며, 각각의 특징과 차이점을 알아보겠습니다.
1. update() 메서드를 사용한 병합
파이썬의 내장 dict 클래스는 update() 메서드를 제공합니다. 이 메서드는 인자로 전달된 딕셔너리의 모든 요소를 호출한 딕셔너리 객체에 병합합니다.
>>> a = {1:'a', 2:'b', 3:'c'}
>>> b = {'x':1,'y':2, 'z':3}
>>> a.update(b)
>>> a
{1: 'a', 2: 'b', 3: 'c', 'x': 1, 'y': 2, 'z': 3}
주의: update() 메서드는 새로운 딕셔너리를 생성하는 것이 아니라 원본 딕셔너리 a 자체를 직접 수정(in-place)합니다. 따라서 원본 데이터를 유지해야 하는 경우에는 적합하지 않습니다.
2. 딕셔너리 언패킹({**a, **b})을 사용한 병합
파이썬 3.5부터는 딕셔너리 언패킹(unpacking) 문법을 활용해 단일 표현식만으로 두 딕셔너리를 병합할 수 있습니다. 이 방식은 원본 딕셔너리를 수정하지 않고 새로운 딕셔너리를 반환한다는 장점이 있습니다.
>>> a = {1:'a', 2:'b', 3:'c'}
>>> b = {'x':1,'y':2, 'z':3}
>>> c = {**a, **b}
>>> c
{1: 'a', 2: 'b', 3: 'c', 'x': 1, 'y': 2, 'z': 3}
언패킹 문법은 세 개 이상의 딕셔너리도 한 번에 병합할 수 있어 유연성이 뛰어납니다. 예를 들어 {**a, **b, **d}처럼 작성하면 됩니다.
3. 병합 연산자(|)를 사용한 병합 — 파이썬 3.9 이상
파이썬 3.9부터는 훨씬 직관적인 병합 연산자 |(merge operator)가 도입되었습니다. 읽기 쉽고 코드가 간결해져 최신 파이썬 환경에서 권장되는 방식입니다.
>>> c = a | b
>>> c
{1: 'a', 2: 'b', 3: 'c', 'x': 1, 'y': 2, 'z': 3}
또한 |= 연산자를 사용하면 기존 딕셔너리를 제자리에서(in-place) 업데이트할 수도 있습니다.
키가 중복될 경우의 동작
어떤 방법을 사용하든 두 딕셔너리에 동일한 키가 존재하면, 나중에 병합되는 딕셔너리의 값이 우선 적용되어 기존 값을 덮어씁니다(overwrite). 이 점을 반드시 기억해야 의도치 않은 데이터 손실을 방지할 수 있습니다.
정리
update(): 원본 딕셔너리를 직접 수정하는 전통적인 방식{**a, **b}: 파이썬 3.5 이상에서 원본을 보존하며 새 딕셔너리 생성a | b: 파이썬 3.9 이상에서 가장 간결하고 가독성 좋은 병합 방식