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

Python에서 다른 딕셔너리의 값으로 새로운 딕셔너리를 만드는 방법

두 개 이상의 딕셔너리를 하나로 합쳐서 새로운 딕셔너리를 만들어야 하는 경우가 자주 있습니다. Python에서는 여러 가지 방법으로 이 작업을 수행할 수 있습니다. 각 방법의 특징과 사용 가능한 버전에 따라 적절한 방식을 선택하면 됩니다.

방법 1: ** 연산자를 사용한 병합 (Python 3.5 이상)

Python 3.5부터는 ** 연산자를 사용해 딕셔너리를 언패킹(unpacking)하여 여러 개의 딕셔너리를 손쉽게 합칠 수 있습니다.

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

출력 결과

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

방법 2: dict() 생성자를 사용한 병합 (구버전 호환)

위의 언패킹 방식은 구버전에서는 지원되지 않습니다. Python 3.5 미만 버전에서는 다음과 같이 dict() 생성자를 활용한 유사한 문법으로 동일한 결과를 얻을 수 있습니다.

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

출력 결과

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

단, 이 방법은 두 번째 딕셔너리의 키(key)가 반드시 문자열이어야 한다는 제약이 있으므로 주의가 필요합니다.

방법 3: 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'}

참고: Python 3.9 이상에서의 병합 연산자

Python 3.9부터는 더욱 직관적인 |(유니언) 연산자를 사용할 수 있습니다. 코드가 훨씬 간결해지므로 최신 버전을 사용 중이라면 이 방법을 권장합니다.

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

마무리

정리하면, Python 3.5 이상에서는 {**a, **b}, Python 3.9 이상에서는 a | b, 그리고 구버전에서는 dict(a, **b) 또는 copy()/update() 조합을 사용하면 됩니다. 상황과 사용 중인 Python 버전에 맞는 방법을 선택하세요.