code: def merge_dicts(*dicts):
      if not reduce(
          lambda x, y: isinstance(y, dict) and x, dicts, True
      ):
          raise TypeError("Object in *dicts not of type dict")
      if len(dicts) < 2:
          raise ValueError("Requires 2 or more dict objects")
  
      def merge(a, b):
          for d in set(a.keys()).union(b.keys()):
              if d in a and d in b:
                  if type(a[d]) == type(b[d]):
                      if not isinstance(a[d], dict):
                          ret = list({a[d], b[d]})
                          if len(ret) == 1:
                              ret = ret[0]
                          yield (d, sorted(ret))
                      else:
                          yield (d, dict(merge(a[d], b[d])))
                  else:
                      raise TypeError(
                          "Conflicting key:value type assignment",
                          type(a[d]),
                          a[d],
                          type(b[d]),
                          b[d],
                      )
              elif d in a:
                  yield (d, a[d])
              elif d in b:
                  yield (d, b[d])
              else:
                  raise KeyError
  
      return reduce(lambda x, y: dict(merge(x, y)), dicts[1:], dicts[0])
  
imports: from __future__ import absolute_import, print_function, unicode_literals
  from glob import glob
  from functools import reduce
  import json
  import jsone
  import os
  import sys
  import requests
  import slugid
  import yaml
  import subprocess
  import networkx
label_desc: Use image node_id 2 for calling a global function with example usage: merge_dicts() and returns: reduce