对字典键内的列表进行排序 - 从3列表中获得最高分

时间:2014-12-03 10:36:59

标签: python dictionary

之前我曾经问了类似这样的问题,所以我道歉,但我读回了这个任务,误读了原来的要求。

所以,根据我在这里收到的反馈,这是我使用的代码:

def task3():
    classList = {}
    classSearch = input("Which class would you like to interrogate? ")
    try:
        with open("answers " + classSearch + ".txt", 'rb') as handle:
            classList = pickle.loads(handle.read())
    except IOError as error:
        print ("Sorry, this file does not exist")

    sortOption = int(input("Would you like sort the students in alphabetical order? Enter 1\n Would you like to sort the students by highest score? Enter 2 \nWould you like to sort students by their average score?Enter 3\n"))
    if sortOption == 1:
        x = sorted(classList.items())
        for key, value in x:
            value.sort()
            value.reverse()
        print (x)

所以我真正需要做的是输出每个学生的最高分,按姓名按字母顺序排序。在classList词典中是学生姓名,然后是包含他们在测验中收到的最后3个分数的列表。这显然是针对多个学生重复的。任何帮助都将受到大力赞赏。

1 个答案:

答案 0 :(得分:0)

这样的事情应该有效,假设输入完全未分类:

for name,highscore in [(student,max(classList[student])) for student in sorted(classList.keys())]:
    print name,highscore

<强> ETA

根据要求,提供解释。

classList是dict,每个成员由一个键(学生的名字)和一个值(该学生的分数列表)组成。

我建议的代码遍历对元组的预排序列表理解,其中包含该学生的学生姓名和最高分,并依次打印每个。

列表理解完成了所有工作。

classList.keys()会生成一个包含学生姓名的列表。在这种情况下,内置sorted函数返回按字母顺序排序的相同内容。

列表推导就像一个for循环,遍历键列表,并构建一个元组列表。

你也可以说

sortedNames = sorted(classList.keys())
for student in sortedNames:
    high_score = max(classList[student])
    print student, high_score