code: def remove_empty_keys(values, remove=({}, None, [], 'null')):
      
      if isinstance(values, dict):
          return {key: remove_empty_keys(value, remove=remove)
                  for key, value in deepcopy(values).items() if value not in remove}
      if isinstance(values, list):
          return [remove_empty_keys(value, remove=remove)
                  for value in deepcopy(values) if value not in remove]
  
      return values
docs: Recursively remove key/value pairs where the value is in ``remove``.
  
      This is targeted at comparing json-e rebuilt task definitions, since
      json-e drops key/value pairs with empty values.
  
      Args:
          values (dict/list): the dict or list to remove empty keys from.
  
      Returns:
          values (dict/list): a dict or list copy, with empty keys removed.