我编写了代码来从文本文件中检索名称并按字母顺序对它们进行排序。但是,我怎么不打印重复的名称?例如,代码是
ClassA= open('A.txt','r')
Classsort= csv.reader(ClassA,delimiter=',')
if sorting==1:
name_sort=sorted(Classsort,key=operator.itemgetter(0))
for everyline in name_sort:
print (everyline)
打印:
[' abba', '1']
[' bety', '3']
[' loli', '0']
[' yano', '4']
[' yano', '1']
但我希望它打印
[' abba', '1']
[' bety', '3']
[' loli', '0']
[' yano', '4,1']`
或仅打印[' yano', '4']
,
因为我想要打印每个学生的最高分
编辑: 嗨答案工作完全谢谢你。但我有一个最后的询问,因为如果名称和分数已被添加到结果dict,我可以这样做只有用户最后3分数被保存?即。如果yano完成测验2次,得到3,7。只打印了最后3个结果:
{' abba': ['1'], ' betyy': ['3'], ' loli': ['0'], ' yano': ['1', '3', '7'], ' gary': ['10'], ' zee': ['4']}
答案 0 :(得分:1)
使用dict
并存储每个人的整个结果列表或仅存储最大结果:
>>> results = {}
>>> for student, score in Classsort:
... results.setdefault(student, []).append(score)
>>> results
{' abba': ['1'], ' bety': ['3'], ' loli': ['0'], ' yano': ['4', '1']}
或者只是最大:
>>> results = {}
>>> for student, score in Classsort:
... results[student] = max(results.get(student, 0), score)
>>> results
{' abba': '1', ' bety': '3', ' loli': '0', ' yano': '4'}
注意:Dicts不是有序的,所以它们按顺序打印出来的事实是巧合的,如果你想按顺序排序,你需要明确地遍历排序的键(或者查看collections.OrderedDict