Deep Merge Nested Dictionaries
Recursively merge configuration dictionaries so nested sections are combined rather than replaced wholesale by a later override.
Code
from copy import deepcopy
from typing import Any, Dict
def deep_merge(base: Dict[str, Any], override: Dict[str, Any]) -> Dict[str, Any]:
result = deepcopy(base)
for key, value in override.items():
current = result.get(key)
if isinstance(current, dict) and isinstance(value, dict):
result[key] = deep_merge(current, value)
else:
result[key] = deepcopy(value)
return result
merged = deep_merge(
{"db": {"host": "localhost", "pool": {"min": 1}}},
{"db": {"pool": {"max": 10}}},
)
print(merged)Report a problem with this exampleOpens a pre-filled issue on GitHub.