以下就是我对多条件排序的一点理解
元组里面的字段分别是(名字,分数,身高,体重)
students = (('a',100,180,180),('b',90,150,130),('c',100,150,120),('d',90,180,120),('e',100,180,150),('f',90,180,150))
a = sorted(students,key=lambda x: (-x[1],-x[2],x[3]))
a
# 我的规则是按分数倒序,身高倒序,体重正序
输出
[('e', 100, 180, 150),
('a', 100, 180, 180),
('c', 100, 150, 120),
('d', 90, 180, 120),
('f', 90, 180, 150),
('b', 90, 150, 130)]
如果换成字典的话
students = [{'name': 'a','score': 100,'height': 180,'weight': 180},
{'name': 'b','score': 90,'height': 150,'weight': 130},
{'name': 'c','score': 100,'height': 150,'weight': 120},
{'name': 'd','score': 90,'height': 180,'weight': 120},
{'name': 'e','score': 100,'height': 180,'weight': 150},
{'name': 'f','score': 90,'height': 180,'weight': 150}]
a = sorted(students,key=lambda x: (-x['score'],-x['height'],x['weight']))
a
输出
[{'height': 180, 'name': 'e', 'score': 100, 'weight': 150},
{'height': 180, 'name': 'a', 'score': 100, 'weight': 180},
{'height': 150, 'name': 'c', 'score': 100, 'weight': 120},
{'height': 180, 'name': 'd', 'score': 90, 'weight': 120},
{'height': 180, 'name': 'f', 'score': 90, 'weight': 150},
{'height': 150, 'name': 'b', 'score': 90, 'weight': 130}]
如果是按照某个值排序,如果这个字段不是数字,是按字符串的话直接写x['name']是可以的
但是如果是按这个字符串的倒序 则需要添加reverse,然后其它所有的都要倒序
就像小学数学 -(a+b-c) = -a-b+c
按分数倒序,名字倒序
a = sorted(students,key=lambda x: (x['score'],x['name']),reverse=True)
a
输出
[{'height': 180, 'name': 'e', 'score': 100, 'weight': 150},
{'height': 150, 'name': 'c', 'score': 100, 'weight': 120},
{'height': 180, 'name': 'a', 'score': 100, 'weight': 180},
{'height': 180, 'name': 'f', 'score': 90, 'weight': 150},
{'height': 180, 'name': 'd', 'score': 90, 'weight': 120},
{'height': 150, 'name': 'b', 'score': 90, 'weight': 130}]