python语言,字典排序

python语言
我的代码已经实现了按平均分的排序,如何在平均分相同的情况下,按学号大小由低到高输出,并且不改变平均分由大到小的输出?sorted只能有一个排序标准吗?
下面是我的代码

img

img

可以多条件排序,设定key可以是一个元组即可。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/783002
  • 除此之外, 这篇博客: python的sorted函数自定义排序中的 输入说明 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    若干行英文,最后以!!!!!为结束。

  • 以下回答来自chatgpt:

    可以使用sorted()函数的key参数,对于平均分相同的学生,将学生编号从小到大作为第二个排序标准。具体实现步骤如下:

    1. 假设原始字典为student_dict,已经按照平均分排序,存储为元素为元组的列表student_tuplelist_sorted。
    2. 使用sorted()函数对student_tuplelist_sorted进行第二次排序,按照学生编号从小到大排列,即key参数为lambda x: (x[1], x[0])。
    3. 遍历排序后的列表,构建排序后的字典student_dict_sorted。

    完整代码如下所示:

    # 假设原始字典为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}}
    

    可以看到,字典已经按照要求正确排序,同时保留了每个学生的名次和分数。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^