파이썬으로 작업하다 보면 여러 개의 딕셔너리(dict)를 하나로 합쳐야 하는 경우가 자주 있습니다. 가장 기본적이면서도 널리 쓰이는 방법은 update() 메서드를 활용하는 것입니다.
update() 메서드로 딕셔너리 병합하기
병합 절차는 다음과 같습니다.
- 병합할 모든 딕셔너리 객체를 하나의 리스트에 담습니다.
- 병합된 결과를 담을 빈 딕셔너리를 초기화합니다.
- 리스트를 순회하면서 각 딕셔너리 항목으로 빈 딕셔너리를 업데이트합니다.
예제 코드
>>> d=[{'a':1, 'b':2, 'c':3}, {'a':1, 'd':2, 'c':'foo'}, {'e':57,'c':3}]
>>> d
[{'a': 1, 'b': 2, 'c': 3}, {'a': 1, 'd': 2, 'c': 'foo'}, {'e': 57, 'c': 3}]
>>> merged={}
>>> for x in d:
merged.update(x)
>>> merged
{'a': 1, 'b': 2, 'c': 3, 'd': 2, 'e': 57}결과 분석
세 개의 딕셔너리가 하나로 깔끔하게 병합되었습니다. 여기서 중요한 점은 키가 중복될 경우 나중에 처리된 값이 앞선 값을 덮어쓴다는 것입니다. 위 예제에서 두 번째 딕셔너리의 'c' 키 값인 'foo'는 세 번째 딕셔너리의 'c': 3에 의해 최종적으로 대체되었습니다.
그 밖의 병합 방법
딕셔너리 언패킹 (Python 3.5 이상)
반복문 없이 언패킹 연산자(**)를 사용하면 한 줄로 병합할 수 있습니다.
>>> merged = {**d[0], **d[1], **d[2]}| 연산자 (Python 3.9 이상)
파이썬 3.9부터는 딕셔너리 병합 연산자(|)를 더욱 직관적으로 사용할 수 있습니다.
>>> merged = d[0] | d[1] | d[2]
이처럼 사용 중인 파이썬 버전과 상황에 맞는 방법을 선택하면 되며, update()를 이용한 반복문 방식은 어떤 버전에서도 동작한다는 장점이 있습니다.