code: def most_probable_alleles(allele_list):
      
      all_alleles = defaultdict()
      # First collect all the keys.  Make a dict with allele as key and list of pvalues as value
      for allele, pvalue in allele_list:
          allele = re.split(':', allele)
          # Ensure allele has enough resolution for mhc:peptide prediciton.
          # HLA-A*02:01:04  -> ['HLA-A*02', '01', '04']   => At least 2 fields are required for
          #                                                  satisfying criteria.
          if len(allele) < 2:
              continue
          allele = ':'.join([allele[0], allele[1]])  # stitch back together
          try:
              all_alleles[allele].append(float(pvalue))
          except KeyError:
              all_alleles[allele] = [float(pvalue)]
      # If there are less than 2 alleles, report all
      if len(all_alleles.keys()) <= 2:
          return all_alleles.keys()
      # Else, get the two with most evidence.  Evidence is gauged by
      # a) How many files (of the 3) thought that Allele was present
      # b) In a tie, who has a lower avg p value
      # In the lambda function, if 2 alleles have the same number of calls, the sum of the p values is
      # a measure of the avg because avg = sum / n and n is equal in both of them.
      else:
          return sorted(all_alleles.keys(), key=lambda x: \
              (-len(all_alleles[x]), sum(all_alleles[x])))[0:2]
docs: This module accepts a list of tuples of (allele, p_value) pairs. It returns the 2 most probable
      alleles for that group.