python多key排序

首先需要知道,python 对 tuple 的排序规则就是多key排序,对于一个三元组的list用默认的sorted,结果是先按照第一个字段升序,在第一个字段相同的情况下按照第二个字段升序,在前两个字段都相同的情况下按照第三个字段升序。

根据python对元祖的这个排序特性,就可以对对象的多个属性来排序,只需要利用 sortedkey 参数,并学会构造元祖来进行排序。

例如 person 是个 list ,每个元素含有 ageheight 两个数值字段,则先按照年龄升序,再按照身高升序的代码为:

# 注意lambda返回值是一个元祖
sorted(person,key=lambda x: (x.age, x.height)) 

鉴于对属性甚至其他更加灵活的键进行排序的问题都可以转化为构造元祖,下面我们深入探究下对元祖进行排序的效果。

s = [(1, 3), (3, 1), (5, 2), (2, 4), (0, 0), (0, 2), (1, 2), (1, 4), (3, 4)]
print("第一种:", sorted(s))
print("第二种:", sorted(s, reverse=True))
print("第三种:", sorted(s, key=lambda x: (x[0], x[1])))
print("第四种:", sorted(s, key=lambda x: (x[0], x[1]), reverse=True))
print("第五种:", sorted(s, key=lambda x: (-x[0], x[1])))
print("第六种:", sorted(s, key=lambda x: (x[0], -x[1])))
print("第七种:", sorted(s, key=lambda x: (-x[0], -x[1])))

输出结果为:

第一种: [(0, 0), (0, 2), (1, 2), (1, 3), (1, 4), (2, 4), (3, 1), (3, 4), (5, 2)]
第二种: [(5, 2), (3, 4), (3, 1), (2, 4), (1, 4), (1, 3), (1, 2), (0, 2), (0, 0)]
第三种: [(0, 0), (0, 2), (1, 2), (1, 3), (1, 4), (2, 4), (3, 1), (3, 4), (5, 2)]
第四种: [(5, 2), (3, 4), (3, 1), (2, 4), (1, 4), (1, 3), (1, 2), (0, 2), (0, 0)]
第五种: [(5, 2), (3, 1), (3, 4), (2, 4), (1, 2), (1, 3), (1, 4), (0, 0), (0, 2)]
第六种: [(0, 2), (0, 0), (1, 4), (1, 3), (1, 2), (2, 4), (3, 4), (3, 1), (5, 2)]
第七种: [(5, 2), (3, 4), (3, 1), (2, 4), (1, 4), (1, 3), (1, 2), (0, 2), (0, 0)]

结论:

第一种 = 第三种,

第二种 = 第四种 = 第七种,

如果想按照某些字段升序另外的字段降序,可以使用第五种、第六种的方式

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值