Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 두 개의 딕셔너리를 병합하는 방법 총정리

파이썬 딕셔너리 병합의 기본: ** 연산자 활용

파이썬 3.5 이상 버전에서는 ** 연산자를 사용해 딕셔너리를 언패킹(unpacking)하여 여러 개의 딕셔너리를 손쉽게 하나로 합칠 수 있습니다. 가장 간결하고 파이썬다운 방식으로, 실무에서도 널리 권장되는 문법입니다.

a = {'foo': 125}
b = {'bar': "hello"}
c = {**a, **b}
print(c)

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

{'foo': 125, 'bar': 'hello'}

두 딕셔너리에 동일한 키가 존재할 경우, 뒤에 오는 딕셔너리(b)의 값이 앞선 딕셔너리(a)의 값을 덮어쓴다는 점을 기억해 두면 좋습니다.

구버전 파이썬에서 사용 가능한 dict() 함수 방식

** 연산자는 파이썬 3.5 미만 버전에서는 지원되지 않습니다. 구버전 환경이라면 dict() 함수를 활용한 유사한 문법으로 대체할 수 있습니다.

a = {'foo': 125}
b = {'bar': "hello"}
c = dict(a, **b)
print(c)

실행 결과는 동일합니다.

{'foo': 125, 'bar': 'hello'}

다만 이 방식은 키(key)가 반드시 문자열이어야 한다는 제약이 있으므로, 키가 문자열이 아닌 경우에는 주의가 필요합니다.

copy()와 update()를 조합한 병합 함수 만들기

또 하나의 안정적인 방법은 copy()update() 메서드를 조합하는 것입니다. 원본 딕셔너리를 변경하지 않고 새로운 딕셔너리를 반환하므로, 재사용 가능한 함수 형태로 만들어 두면 여러 곳에서 유용하게 활용할 수 있습니다.

def merge_dicts(x, y):
    z = x.copy()   # x의 키와 값으로 시작
    z.update(y)    # y의 키와 값으로 z를 갱신
    return z

a = {'foo': 125}
b = {'bar': "hello"}
c = merge_dicts(a, b)
print(c)

실행 결과는 다음과 같습니다.

{'foo': 125, 'bar': 'hello'}

정리: 상황별 최적의 병합 방법

  • 파이썬 3.5 이상: {**a, **b} — 가장 간결하고 직관적인 방식
  • 파이썬 3.9 이상: a | b 병합 연산자도 사용 가능
  • 구버전 호환성 필요 시: dict(a, **b) 또는 copy/update 조합

각 방식마다 장단점이 있으므로, 프로젝트에서 사용 중인 파이썬 버전과 요구 사항에 맞는 방법을 선택하시기 바랍니다.