code: def search(self, path_expression, mode=UXP, values=None, ifunc=lambda x: x):
          
          # keys = path_expression if isinstance(path_expression, six.string_types) else path_expression[-1]
  
          path_and_value_list = iterutils.search(
              self.data,
              path_expression=path_expression,
              required_values=values,
              exact=(mode[1] == "x"))
  
          return self.__return_value(path_and_value_list, mode, ifunc)
docs: find matches for the given path expression in the data
  
          :param path_expression: path tuple or string
          :return: