| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- # Copyright (c) IPython Development Team.
- # Distributed under the terms of the Modified BSD License.
- from __future__ import annotations
- from typing import Any, Dict
- def nested_update(this: Dict[Any, Any], that: Dict[Any, Any]) -> Dict[Any, Any]:
- """Merge two nested dictionaries.
- Effectively a recursive ``dict.update``.
- Examples
- --------
- Merge two flat dictionaries:
- >>> nested_update(
- ... {'a': 1, 'b': 2},
- ... {'b': 3, 'c': 4}
- ... )
- {'a': 1, 'b': 3, 'c': 4}
- Merge two nested dictionaries:
- >>> nested_update(
- ... {'x': {'a': 1, 'b': 2}, 'y': 5, 'z': 6},
- ... {'x': {'b': 3, 'c': 4}, 'z': 7, '0': 8},
- ... )
- {'x': {'a': 1, 'b': 3, 'c': 4}, 'y': 5, 'z': 7, '0': 8}
- """
- for key, value in this.items():
- if isinstance(value, dict):
- if key in that and isinstance(that[key], dict):
- nested_update(this[key], that[key])
- elif key in that:
- this[key] = that[key]
- for key, value in that.items():
- if key not in this:
- this[key] = value
- return this
|