def bestGenders(genderdata):
best = []
sortfun = lambda x: (round(x['Xhetp'], 1), x['percentile'])
for k,v in itertools.groupby(genderdata, key=lambda x: x['sample']):
allcalls = list(v)
noNA = [r for r in allcalls if r['gender'] != 'na']
if not noNA:
best.append(allcalls[0])
continue
verdicts = {r['gender'] for r in noNA}
if 'Male' in verdicts and 'Female' in verdicts:
# if both genders are called, choose the last one
noQ = [r for r in noNA if r['gender'] != '?']
best.append(noQ[-1])
continue
if verdicts == {'?'}:
verd = '?'
else:
verd = list(verdicts.difference({'?'}))[0]
use = sorted([r for r in noNA if r['gender'] == verd], key=sortfun)
best.append(use[0])
return gender_table(best)
评论列表
文章目录