Python 딕셔너리 merge 연산자 대신 사용하던 방법들
배경
API 응답을 조합하는 유틸 함수를 작성하다가 딕셔너리 병합 방법을 다시 정리할 필요가 생겼다. 팀 내에서도 각자 다른 방식을 사용하고 있어서 정리해둔다.
주로 사용하는 방법들
1. update() 메서드
가장 흔하게 사용하는 방법이지만 원본을 수정한다는 단점이 있다.
default_config = {'timeout': 30, 'retry': 3}
user_config = {'timeout': 60}
result = default_config.copy()
result.update(user_config)
# {'timeout': 60, 'retry': 3}
2. unpacking 연산자
Python 3.5+에서 사용 가능. 가독성이 좋아서 최근 선호하는 방식이다.
result = {**default_config, **user_config}
3. dict() 생성자
체이닝이 필요할 때 사용했는데, 가독성이 떨어져서 지양하게 됐다.
result = dict(default_config, **user_config)
성능 비교
간단히 측정해봤을 때 unpacking이 update()보다 약간 느렸지만, 실무에서 체감할 수준은 아니었다. 대신 불변성 유지와 한 줄 작성이 가능하다는 장점이 더 크다고 판단했다.
결론
- 간단한 병합:
{**dict1, **dict2}사용 - 여러 딕셔너리 병합:
reduce또는 반복문 사용 - 성능이 중요한 경우:
update()고려
팀 컨벤션으로 unpacking 방식을 표준으로 정했다.