Python - Update dict in a cascade manner
def update_dict_cascade(dict_1, dict_2): """ Update dict_1 with dict_2 in a cascade manner. :param dict_1: The dict to be updated. :param dict_2: The dict used for updating. :return: The updated dict_1. """ if dict_1 == dict_2: pass else: for k, v in dict_2.items(): try: v1 = dict_1[k] if not isinstance(v1, dict) or not isinstance(v, dict): dict_1[k] = [v1, v] else: dict_1[k] = update_dict_cascade(v1, v) except KeyError: dict_1[k] = v return dict_1
Test:
a = {'a': {'aa': {'aaa': 1}}}
b = {'a': {'aa': {'bbb': 2}}}
c = {'a': {'bb': {'ccc': 3}}}
d = {'b': {'bb': {'ddd': 4}}}
e = {'c': {'cc': {'eee': 5}}}
print(a)
update_dict_cascade(a, b)
print(a)
update_dict_cascade(a, c)
print(a)
update_dict_cascade(a, d)
print(a)
update_dict_cascade(a, e)
print(a)
Output:
{'a': {'aa': {'aaa': 1}}}
{'a': {'aa': {'aaa': 1, 'bbb': 2}}}
{'a': {'aa': {'aaa': 1, 'bbb': 2}, 'bb': {'ccc': 3}}}
{'a': {'aa': {'aaa': 1, 'bbb': 2}, 'bb': {'ccc': 3}}, 'b': {'bb': {'ddd': 4}}}
{'a': {'aa': {'aaa': 1, 'bbb': 2}, 'bb': {'ccc': 3}}, 'b': {'bb': {'ddd': 4}}, 'c': {'cc': {'eee': 5}}}