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 방식을 표준으로 정했다.