Returns the index of the first list entry that matches. If no matches
    are found, it returns None
    NOTE: it is not returning a list. It is returning an integer in range 0..LEN(target)
    NOTE: both 'None' and 0 evaluate as False in python. So, if you are checking for a
       None being returned, be explicit. "if myindex==None:" not simply "if not myindex:"

def get_index(table, field_name, op, value):
    ''' 
    Returns the index of the first list entry that matches. If no matches
    are found, it returns None
    NOTE: it is not returning a list. It is returning an integer in range 0..LEN(target)
    NOTE: both 'None' and 0 evaluate as False in python. So, if you are checking for a
       None being returned, be explicit. "if myindex==None:" not simply "if not myindex:"
    '''
    counter = 0
    for row in table:
        dict_row = convert_to_dict(row)
        if do_op(dict_row.get(field_name, None), op, value):
            return counter
        counter += 1
    return None