python的多条件排序

以下就是我对多条件排序的一点理解

元组里面的字段分别是(名字,分数,身高,体重)

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}]

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天马行空波

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值