>백엔드 개발 >파이썬 튜토리얼 >Python에서 다단계 사전을 어떻게 재귀적으로 병합할 수 있나요?

Python에서 다단계 사전을 어떻게 재귀적으로 병합할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-04 20:42:11340검색

How Can I Recursively Merge Multi-Level Dictionaries in Python?

다단계 사전을 심층적으로 병합

Python에서는 알 수 없는 중첩 깊이를 유지하면서 사전을 재귀적으로 병합하는 것이 어려울 수 있습니다. 이 문제를 해결하는 솔루션은 다음과 같습니다.

def deep_merge(a: dict, b: dict, path=[]):
    for key in b:
        if key in a:
            if isinstance(a[key], dict) and isinstance(b[key], dict):
                deep_merge(a[key], b[key], path + [str(key)])
            elif a[key] != b[key]:
                raise Exception('Conflict at ' + '.'.join(path + [str(key)]))
        else:
            a[key] = b[key]
    return a

이 함수는 두 개의 사전을 입력으로 사용하고 해당 내용을 반복적으로 병합합니다. 충돌 시 더 정확한 오류 메시지를 제공하기 위해 현재 중첩 수준을 추적하는 경로를 유지합니다.

예:

dict1 = {1:{'a':{'A'}}, 2:{'b':{'B'}}}
dict2 = {2:{'c':{'C'}}, 3:{'d':{'D'}}}
result = deep_merge(dict1, dict2)

print(result)
# {1:{'a':{'A'}}, 2:{'b':{'B'}, 'c':{'C'}}, 3:{'d':{'D'}}}

deep_merge는 첫 번째 인수를 변경하므로 결과가 병합된 사전이 포함되어 있습니다.

여러 사전을 수정하지 않고 병합하려면 해당 사전을 키워드로 전달하세요. 인수:

from functools import reduce
result = reduce(deep_merge, [dict1, dict2, ...], {})

위 내용은 Python에서 다단계 사전을 어떻게 재귀적으로 병합할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.