Python : 显示按多个条件排序的字典

Python : Displaying a sorted dictionary by more than one condition

我想让我的代码做的是对每个学生的部分成绩和 return 他们的最终成绩求和,按成绩排序, 如果同年级的学生,先显示高分学生。

我的代码:

nice={}

try:

    with open('grades.txt') as file:
        data = file.readlines()

except IOError as ioerr:
    print(str(ioerr))


for each_line in data:
    (number, grade) = each_line.split()
    if number not in nice:
        nice[number]=0
    nice[number]+=int(grade)


for i in sorted(nice, key=lambda n: (-nice[n],n)):
    print(i,nice[i])

我的输入:文件:"grades.txt"

10885 10
70000 6
70000 10
60000 4
70000 4
60000 4
10885 10
60001 5
60002 8
60003 8

我的输出:

10885 20
70000 20
60000 8
60002 8
60003 8
60001 5

如您所见,我已经找到了一种方法,可以将每个部分成绩加总为最终成绩,并按成绩显示它们,但我还没有想出如何实现其他条件,有效地得到这个期望输出:

10885 20
70000 20
60003 8
60002 8
60000 8
60001 5

由于学生 60000,60002,60003 的成绩相同,他们应该如上显示,60003>60002>60000.

尝试把它想成只是略有不同(即条件倒置)通常会有所帮助

sorted(nice.items(), key=lambda itm: map(int,itm[::-1]),reverse=True)

或在python 3

sorted(nice.items(), key=lambda v: (int(v[1]),int(v[0])),reverse=True)

sorted(nice.items(), key=lambda itm: list(map(int,itm[::-1])),reverse=True)

应该适用于 python2 或 3

python3.4.3

>>> nice
{'60000': '8', '60001': '5', '70000': '20', '60003': '8', '10885': '20', '60002': '8'}
>>> sorted(nice.items(), key=lambda itm: list(map(int,itm[::-1])),reverse=True)
[('70000', '20'), ('10885', '20'), ('60003', '8'), ('60002', '8'), ('60000', '8'), ('60001', '5')]