dict_a = {"ABC": {"DE": {"F": "G"}}}
dict_b = {"ABC": {"DE": {"H": "I"}, "JKL": "M"}}
def merge_nested_dictionaries(dict_a, dict_b, path=None):
"""
recursive function for merging dict_b into dict_a
"""
if path is None:
path = []
for key in dict_b:
if key in dict_a:
if isinstance(dict_a[key], dict) and isinstance(dict_b[key], dict):
merge_nested_dictionaries(dict_a[key], dict_b[key], path + [str(key)])
elif dict_a[key] == dict_b[key]:
pass
else:
raise Exception('Conflict at %s' % '.'.join(path + [str(key)]))
else:
dict_a[key] = dict_b[key]
return dict_a
merge_nested_dictionaries(dict_a, dict_b)
{'ABC': {'DE': {'F': 'G', 'H': 'I'}, 'JKL': 'M'}}