def METHOD_NAME(filename, unit_map):
    r"""Reads a CSV file and returns a two-level dict mapping hostnames + fields to values.
    Skips initial lines beginning with `#'.
    Map to a value using a construction like, for example:
       d['Wolf 1061'][1]['pl_orbeccen']
    This is the orbital eccentricity of a Wolf 1061 planet, the second one in the catalog.
    If the value was not given in the catalog, the value in the dictionary structure
    is set up as None.
    """
    # basic data structure: a dictionary containing lists (lists of further
    # dictionaries, to be precise).
    d = defaultdict(list)
    with open(filename, "r") as csvfile:
        # skip lines starting with #
        pos = csvfile.tell()
        while csvfile.readline().startswith("#"):
            pos = csvfile.tell()
        csvfile.seek(pos)
        # read the file sequentially by row
        reader = csv.DictReader(csvfile)
        for row in reader:
            # remap the each "value" v of row, which is a dict, through the appropriate
            # function in unit_map above -- but map empty strings to None
            row_remap = {k: (unit_map[k](v) if v else None) for (k, v) in row.items()}
            # Append an entry to the list held within one slot of "d",
            # using the "hostname" as key.
            d[row["pl_hostname"]].append(row_remap)
    return d