code: def merge_dictionaries(a, b, path=None, update=True):
      
      if path is None:
          path = []
      for key in b:
          if key in a:
              if isinstance(a[key], dict) and isinstance(b[key], dict):
                  merge_dictionaries(a[key], b[key], path + [str(key)])
              elif a[key] == b[key]:
                  pass # same leaf value
              elif isinstance(a[key], list) and isinstance(b[key], list):
                  for idx, val in enumerate(b[key]):
                      a[key][idx] = merge_dictionaries(a[key][idx],
                                                       b[key][idx],
                                                       path + [str(key), str(idx)],
                                                       update=update)
              elif update:
                  a[key] = b[key]
              else:
                  raise Exception('Conflict at %s' % '.'.join(path + [str(key)]))
          else:
              a[key] = b[key]
      return a
docs: Merge two dictionaries recursively.
  
      From https://stackoverflow.com/a/25270947