此列表是否存储了最后3个结果?

2024-10-02 22:27:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了从文本文件中检索名称并按字母顺序排序的代码。但是,如何不打印重复的名称?例如,代码是

 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个分数?也就是说,如果雅诺完成了两次以上的测验,得了3.7分。只打印最后3个结果:

{' abba': ['1'], ' betyy': ['3'], ' loli': ['0'], ' yano': ['1', '3', '7'], ' gary': ['10'], ' zee': ['4']}

Tags: 代码name名称顺序字母sort分数文本文件
1条回答
网友
1楼 · 发布于 2024-10-02 22:27:25

使用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'}

注意:dict不是有序的,所以它们按顺序打印出来的事实是巧合,如果您想让它们按顺序(或者查看collections.OrderedDict)的话,您需要显式地遍历已排序的键

相关问题 更多 >