Python 딕셔너리 병합 시 성능 비교
문제 상황
여러 외부 API의 응답을 하나의 딕셔너리로 통합하는 작업에서 병목이 발생했다. 평균 5~10개 정도의 딕셔너리를 병합하는데, 초당 수백 건의 요청을 처리하다 보니 작은 차이도 누적되었다.
테스트한 방법들
import time
# 샘플 데이터
d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}
d3 = {'e': 5, 'f': 6}
# 방법 1: update() 사용
def merge_update():
result = {}
result.update(d1)
result.update(d2)
result.update(d3)
return result
# 방법 2: unpacking (Python 3.5+)
def merge_unpacking():
return {**d1, **d2, **d3}
# 방법 3: dict() + items()
def merge_items():
return dict(list(d1.items()) + list(d2.items()) + list(d3.items()))
결과
각 방법을 100만 회 반복 실행했을 때:
update(): 약 1.2초unpacking: 약 0.8초items(): 약 1.5초
unpacking 방식이 가장 빠르고 코드도 간결했다. Python 3.5 이상에서만 동작하지만, 우리 환경은 3.6이라 문제없었다.
적용
def aggregate_api_responses(responses):
# responses: List[Dict]
result = {}
for resp in responses:
result = {**result, **resp}
return result
이후 응답 처리 속도가 약 15% 개선되었다. 큰 차이는 아니지만 트래픽이 많은 엔드포인트에서는 의미 있는 수치였다.
주의사항
딕셔너리가 매우 클 경우(키 1만 개 이상)에는 양상이 달라질 수 있다. 실제 데이터 크기로 프로파일링하는 것이 중요하다.