code: def flatten(d, reducer='tuple', inverse=False):
      
      if isinstance(reducer, str):
          reducer = REDUCER_DICT[reducer]
      flat_dict = {}
  
      def _flatten(d, parent=None):
          for key, value in six.viewitems(d):
              flat_key = reducer(parent, key)
              if isinstance(value, Mapping):
                  _flatten(value, flat_key)
              else:
                  if inverse:
                      flat_key, value = value, flat_key
                  if flat_key in flat_dict:
                      raise ValueError("duplicated key '{}'".format(flat_key))
                  flat_dict[flat_key] = value
  
      _flatten(d)
      return flat_dict
docs: Flatten dict-like object.
  
      Parameters
      ----------
      d: dict-like object
          The dict that will be flattened.
      reducer: {'tuple', 'path', function} (default: 'tuple')
          The key joining method. If a function is given, the function will be
          used to reduce.
          'tuple': The resulting key will be tuple of the original keys
          'path': Use ``os.path.join`` to join keys.
      inverse: bool (default: False)
          Whether you want invert the resulting key and value.
  
      Returns
      -------
      flat_dict: dict