code: def names_and_values(self, key, minval=None, minfract=None, sorted=True):
          
          values = self.get_values(key)
          names = self.get_values("name")
  
          new_names, new_values = [], []
          other_val = 0.0
  
          if minval is not None:
              assert minfract is None
  
              for n, v in zip(names, values):
                  if v >= minval:
                      new_names.append(n)
                      new_values.append(v)
                  else:
                      other_val += v
  
              new_names.append("below minval " + str(minval))
              new_values.append(other_val)
  
          elif minfract is not None:
              assert minval is None
  
              total = self.sum_sections(key)
  
              for n, v in zip(names, values):
                  if v / total >= minfract:
                      new_names.append(n)
                      new_values.append(v)
                  else:
                      other_val += v
  
              new_names.append("below minfract " + str(minfract))
              new_values.append(other_val)
  
          else:
              # all values
              new_names, new_values = names, values
  
          if sorted:
              # Sort new_values and rearrange new_names.
              fsort = lambda t: t[1]
              nandv = [nv for nv in zip(new_names, new_values)]
              nandv.sort(key=fsort)
              new_names, new_values = [n[0] for n in nandv], [n[1] for n in nandv]
  
          return new_names, new_values
docs: Select the entries whose value[key] is >= minval or whose fraction[key] is >= minfract
          Return the names of the sections and the corresponding values.