st-ten-1/src/lib/helpers/dict_merger.py
matteo porta 0beb139753 init
2022-06-01 18:37:27 +02:00

28 lines
740 B
Python

from collections.abc import MutableMapping, MutableSequence
from copy import deepcopy
def recursive_merge(a, b):
if type(a) is not type(b):
return b
if isinstance(a, MutableMapping):
for k, v in b.items():
if k in a:
a[k] = merge_dicts(a[k], v)
else:
a[k] = v
elif isinstance(a, MutableSequence):
for i, v in enumerate(b):
if i < len(a):
a[i] = merge_dicts(a[i], v)
else:
a.append(v)
else:
return b
return a
def merge_dicts(a, b):
# merge a and b preferring b when items differ
return recursive_merge(deepcopy(a), deepcopy(b)) # do not change the passed mutables