如何对列表里的字典进行排序

列表如下
[{‘学生姓名’: ‘SanZhang’, ‘高数成绩’: 70, ‘英语成绩’: 80,‘大物成绩’: 61}, {‘学生姓名’: ‘SiLi’,‘高数成绩’: 86,‘英语成绩’: 77,‘大物成绩’: 81}, {‘学生姓名’: ‘WuWang’,‘高数成绩’: 88,‘英语成绩’: 90,‘大物成绩’: 77}, {‘学生姓名’: ‘MingLi’,‘高数成绩’: 60,‘英语成绩’: 77,‘大物成绩’: 81}, {‘学生姓名’: ‘MiWang’,‘高数成绩’: 71,‘英语成绩’: 70,‘大物成绩’: 60}, {‘学生姓名’: ‘HaiLi’,‘高数成绩’: 88,‘英语成绩’: 78,‘大物成绩’: 89}, {‘学生姓名’: ‘HeWang’,‘高数成绩’: 70,‘英语成绩’: 90,‘大物成绩’: 80}, {‘学生姓名’: LiWang’,‘高数成绩’: 67,‘英语成绩’: 71,‘大物成绩’: 70}]
需要分别按照总分和高数成绩从高到低进行排列,如果成绩相同则按照录入先后顺序进行排列,输出案例如下,

img


求个详细代码和说明,感谢!

【以下回答由 GPT 生成】

要对给定的列表进行排序,按照总分和高数成绩从高到低的顺序进行排列,可以使用Python内置的sorted函数。该函数可以根据指定的key来对列表进行排序。

首先,我们需要定义一个自定义的排序函数,该函数会将每个字典的总分和高数成绩作为排序依据返回。然后,我们将这个自定义的排序函数作为sorted函数的key参数传入,以便使用它来对列表进行排序。

在排序函数中,我们首先将高数成绩大物成绩相加得到总分,并将这个总分和高数成绩一起作为元组返回。最后,我们还需要将字典在列表中的位置作为元组的最后一个元素,以便在成绩相同时按照录入先后顺序排序。

下面是具体的代码实现:

def custom_sort(item):
    total_score = item['高数成绩'] + item['大物成绩']
    return (-total_score, -item['高数成绩'], item)

students = [
    {'学生姓名': 'SanZhang', '高数成绩': 70, '英语成绩': 80,'大物成绩': 61},
    {'学生姓名': 'SiLi', '高数成绩': 86, '英语成绩': 77, '大物成绩': 81},
    {'学生姓名': 'WuWang', '高数成绩': 88, '英语成绩': 90, '大物成绩': 77},
    {'学生姓名': 'MingLi', '高数成绩': 60, '英语成绩': 77, '大物成绩': 81},
    {'学生姓名': 'MiWang', '高数成绩': 71, '英语成绩': 70, '大物成绩': 60},
    {'学生姓名': 'HaiLi', '高数成绩': 88, '英语成绩': 78, '大物成绩': 89},
    {'学生姓名': 'HeWang', '高数成绩': 70, '英语成绩': 90, '大物成绩': 80},
    {'学生姓名': 'LiWang', '高数成绩': 67, '英语成绩': 71, '大物成绩': 70}
]

sorted_students = sorted(students, key=custom_sort)

print(sorted_students)

以上代码中,我们定义了custom_sort函数作为自定义的排序函数。在main函数中,我们调用sorted函数对students列表进行排序,指定custom_sort函数作为key参数。最后,我们将排好序的列表打印输出。

希望以上代码能够解决您的问题,如果还有其他疑问,请随时提出。


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