python语言
我的代码已经实现了按平均分的排序,如何在平均分相同的情况下,按学号大小由低到高输出,并且不改变平均分由大到小的输出?sorted只能有一个排序标准吗?
下面是我的代码
可以多条件排序,设定key可以是一个元组即可。
不知道你这个问题是否已经解决, 如果还没有解决的话:若干行英文,最后以!!!!!
为结束。
可以使用sorted()函数的key参数,对于平均分相同的学生,将学生编号从小到大作为第二个排序标准。具体实现步骤如下:
完整代码如下所示:
# 假设原始字典为student_dict,已经按照平均分排序,存储为元素为元组的列表student_tuplelist_sorted。
student_tuplelist_sorted = [('S1', 90), ('S2', 80), ('S3', 90), ('S4', 75), ('S5', 85)]
# 对student_tuplelist_sorted进行第二次排序,按照学生编号从小到大排列,即key参数为lambda x: (x[1], x[0])。
student_tuplelist_sorted = sorted(student_tuplelist_sorted, key=lambda x: (x[1], x[0]))
# 遍历排序后的列表,构建排序后的字典student_dict_sorted。
student_dict_sorted = {}
for i, (k, v) in enumerate(student_tuplelist_sorted):
student_dict_sorted[k] = {'rank': i+1, 'score': v}
print(student_dict_sorted)
输出结果为:
{'S4': {'rank': 1, 'score': 75}, 'S2': {'rank': 2, 'score': 80},
'S5': {'rank': 3, 'score': 85}, 'S1': {'rank': 4, 'score': 90},
'S3': {'rank': 5, 'score': 90}}
可以看到,字典已经按照要求正确排序,同时保留了每个学生的名次和分数。