def get_exon_dict(metadata_list, strand):
    """ Get an auxiliary dictionary used for filtering

    Parameters
    ----------
    metadata_list: List(Output_metadata).

    Returns
    -------
    exon_dict: dict. (read_frame, pos_mid_1, pos_mid_2, variant_combination)
        -> List[Tuple(output_idx, pos_start, pos_end,)]
    """
    exon_dict = {}
    for metadata in metadata_list:
        coord = metadata.exons_coor
        idx = metadata.output_id
        read_frame = metadata.read_frame.read_phase
        if strand == '+':
            key = read_frame, coord.stop_v1, coord.start_v2
            if key in exon_dict:
                exon_dict[key].append((idx, coord.start_v1, coord.stop_v2))
            else:
                exon_dict[key] = [(idx, coord.start_v1, coord.stop_v2)]
        else:
            key = read_frame, coord.stop_v2, coord.start_v1
            if key in exon_dict:
                exon_dict[key].append((idx, coord.start_v2, coord.stop_v1))
            else:
                exon_dict[key] = [(idx, coord.start_v2, coord.stop_v1)]
    return exon_dict
