def get_item_metric_pair(item_lst, metric_lst, id_lst):
    """
    align bleu and specific score in item_lst, reconstruct the data as (rank_score, bleu) pairs, query_dic.
    Detail:
        query dict is input parameter used by metrics: top-x-bleu, kendall-tau
        query dict is reconstructed dict type data container,
        query dict's key is qid and value is list type, whose elements are tuple eg: count of words, bleu score pairs
    :param item_lst: the score value lst that used to rank candidates
    :param metric_lst: the metric value aligned with item_lst
    :return: query_dic
    """
    query_dic = {}  # key is qid, value is list, whose elements are tuple eg: count of words, bleu score pairs
    for index in range(len(metric_lst)):
        current_id = id_lst[index]
        current_bleu = metric_lst[index]
        current_rank_score = item_lst[index]
        if current_id in query_dic:
            query_dic[current_id].append((current_rank_score, current_bleu))
        else:
            query_dic[current_id] = []
            query_dic[current_id].append((current_rank_score, current_bleu))
    return query_dic
align bleu and specific score in item_lst, reconstruct the data as (rank_score, bleu) pairs, query_dic.
    Detail:
        query dict is input parameter used by metrics: top-x-bleu, kendall-tau
        query dict is reconstructed dict type data container,
        query dict's key is qid and value is list type, whose elements are tuple eg: count of words, bleu score pairs
    :param item_lst: the score value lst that used to rank candidates
    :param metric_lst: the metric value aligned with item_lst
    :return: query_dic