깊이 보존을 사용한 중첩 사전 업데이트
Python에서 중첩 사전을 업데이트하는 것은 까다로울 수 있으며, 특히 내용을 다음과 병합하려는 경우 더욱 그렇습니다. 다른 깊이에서 특정 값을 유지하면서 다른 사전. 다음 시나리오를 고려하십시오.
dictionary1과 update라는 두 개의 사전이 있는 경우, 다른 모든 값을 업데이트하는 동안 가장 깊은 수준(예: "levelA")의 특정 값을 덮어쓰지 않고 update 내용으로 Dictionary1을 업데이트할 수 있는 방법은 무엇입니까? ?
dictionary1 = { "level1": { "level2": {"levelA": 0, "levelB": 1} } } update = { "level1": { "level2": {"levelB": 10} } }
업데이트 방법을 사용하면 전체 "level2" 하위 사전을 덮어쓰고 "levelA" 값이 손실됩니다.
dictionary1.update(update) print(dictionary1)
{ "level1": { "level2": {"levelB": 10} } }
이 문제를 해결하려면 , 사전의 다양한 깊이를 고려하고 값을 적절하게 병합하는 재귀 솔루션이 필요합니다.
재귀 솔루션:
다음 코드는 재귀 "부분 업데이트"를 구현합니다. 지정된 키를 덮어쓰지 않고 사전 값을 업데이트하는 함수:
import copy def partial_update(d, u, preserve): for k, v in u.items(): if isinstance(v, dict): if d.get(k, None) is None: d[k] = copy.deepcopy(v) else: partial_update(d[k], v, preserve) elif k in preserve: continue else: d[k] = copy.deepcopy(v) return d
partial_update 함수는 세 가지 인수를 사용합니다.
이 예에서 "levelA" 값을 유지하려면 다음 코드를 사용할 수 있습니다.
partial_update(dictionary1, update, ["levelA"]) print(dictionary1)
{ "level1": { "level2": {"levelA": 0, "levelB": 10} } }
이 솔루션에서는 예기치 않은 수정을 방지하기 위해 업데이트하기 전에 사전 사본을 만듭니다. 이렇게 하면 부분 업데이트 후에도 원래 사전이 그대로 유지됩니다.
위 내용은 다양한 깊이에서 특정 값을 유지하면서 Python에서 중첩 사전을 업데이트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!