diff --git a/dpath/util.py b/dpath/util.py index f90fd6e..7b7280d 100644 --- a/dpath/util.py +++ b/dpath/util.py @@ -8,6 +8,7 @@ MERGE_REPLACE = (1 << 1) MERGE_ADDITIVE = (1 << 2) MERGE_TYPESAFE = (1 << 3) +MERGE_REPLACE_RECURSIVE = (1 << 4) def __safe_path__(path, separator): ''' @@ -335,6 +336,13 @@ def merger(dst, src, _segments=()): target += found continue + if flags & MERGE_REPLACE_RECURSIVE: + for i, v in enumerate(found): + if isinstance(target[i], dict) and isinstance(v, dict): + merger(target[i], v) + else: + target[i] = v + if flags & MERGE_REPLACE: try: target['']