# 有学生考试分数
message = [
{"姓名": "小明", "学号": "05", "班级": 1, "分数": 80},
{"姓名": "小红", "学号": "04", "班级": 1, "分数": 90},
{"姓名": "小王", "学号": "02", "班级": 1, "分数": 95},
{"姓名": "小花", "学号": "08", "班级": 2, "分数": 88},
{"姓名": "小丽", "学号": "07", "班级": 2, "分数": 88},
{"姓名": "小刘", "学号": "09", "班级": 2, "分数": 88},
{"姓名": "小天", "学号": "01", "班级": 2, "分数": 95},
]
# 排序规则:
# 1.按照分数从小到大排序
# 2.分数相同,则按照班级从小到大排序
# 3.分数和班级都相同,按照学号从小到大排序
new_message = sorted(message, key = lambda x: (x["分数"], x["班级"], x["学号"]))
print(new_message)
需要注意的是:sorted默认排序是从小到大
打印结果如下:
[
{'姓名': '小明', '学号': '05', '班级': 1, '分数': 80},
{'姓名': '小丽', '学号': '07', '班级': 2, '分数': 88},
{'姓名': '小花', '学号': '08', '班级': 2, '分数': 88},
{'姓名': '小刘', '学号': '09', '班级': 2, '分数': 88},
{'姓名': '小红', '学号': '04', '班级': 1, '分数': 90},
{'姓名': '小王', '学号': '02', '班级': 1, '分数': 95},
{'姓名': '小天', '学号': '01', '班级': 2, '分数': 95}
]
要想从大到小排序,只需要添加reverse = True
new_message=sorted(message,key=lambda x:(x["分数"],x["班级"],x["学号"]),reverse=Ture)
# 结果如下:分数, 班级, 学号都从大到小排序
[
{'姓名': '小天', '学号': '01', '班级': 2, '分数': 95},
{'姓名': '小王', '学号': '02', '班级': 1, '分数': 95},
{'姓名': '小红', '学号': '04', '班级': 1, '分数': 90},
{'姓名': '小刘', '学号': '09', '班级': 2, '分数': 88},
{'姓名': '小花', '学号': '08', '班级': 2, '分数': 88},
{'姓名': '小丽', '学号': '07', '班级': 2, '分数': 88},
{'姓名': '小明', '学号': '05', '班级': 1, '分数': 80}
]