docs: def get_dictitem(In, k, v, flag, float_to_int=False):
      """ returns a list of dictionaries from list In with key,k  = value, v . CASE INSENSITIVE # allowed keywords:
          requires that the value of k in the dictionaries contained in In be castable to string and requires that v be castable to a string if flag is T,F
          ,has or not and requires they be castable to float if flag is eval, min, or max.
          float_to_int goes through the relvant values in In and truncates them,
          (like "0.0" to "0") for evaluation, default is False
  
      Parameters
      __________
          In : list of dictionaries to work on
          k : key to test
          v : key value to test
          flag : [T,F,has, or not]
          float_to int : if True, truncates to integer
      Returns
      ______
          list of dictionaries that meet condition
      """
      if float_to_int:
          try:
              v = str(math.trunc(float(v)))
          except ValueError:  # catches non floatable strings
              pass
          except TypeError:  # catches None
              pass
          fixed_In = []
          for dictionary in In:
              if k in dictionary:
                  val = dictionary[k]
                  try:
                      val = str(math.trunc(float(val)))
                  except ValueError:  # catches non floatable strings
                      pass
                  except TypeError:  # catches None
                      pass
                  dictionary[k] = val
              fixed_In.append(dictionary)
          In = fixed_In
      if flag == "T":
          # return that which is
          return [dictionary for dictionary in In if k in list(dictionary.keys()) and str(dictionary[k]).lower() == str(v).lower()]
      if flag == "F":
          # return that which is not
          return [dictionary for dictionary in In if k in list(dictionary.keys()) and str(dictionary[k]).lower() != str(v).lower()]
      if flag == "has":
          # return that which is contained
          return [dictionary for dictionary in In if k in list(dictionary.keys()) and str(v).lower() in str(dictionary[k]).lower()]
      if flag == "not":
          # return that which is not contained
          return [dictionary for dictionary in In if k in list(dictionary.keys()) and str(v).lower() not in str(dictionary[k]).lower()]
      if flag == "eval":
          A = [dictionary for dictionary in In if k in list(dictionary.keys(
          )) and dictionary[k] != '']  # find records with no blank values for key
          # return that which is
          return [dictionary for dictionary in A if k in list(dictionary.keys()) and float(dictionary[k]) == float(v)]
      if flag == "min":
          A = [dictionary for dictionary in In if k in list(dictionary.keys(
          )) and dictionary[k] != '']  # find records with no blank values for key
          # return that which is greater than
          return [dictionary for dictionary in A if k in list(dictionary.keys()) and float(dictionary[k]) >= float(v)]
      if flag == "max":
          A = [dictionary for dictionary in In if k in list(dictionary.keys(
          )) and dictionary[k] != '']  # find records with no blank values for key
          # return that which is less than
          return [dictionary for dictionary in A if k in list(dictionary.keys()) and float(dictionary[k]) <= float(v)]
      if flag == 'not_null':
          return [dictionary for dictionary in In if dictionary[k]]