python拾遗系列:python下list类型的排序

1. 问题梳理

由于业务的需要,需要对列表类型的进行多列排序,问题梳理:

  • list 里存储的是复杂对象
  • 需要支持多列排序、升序降序

2. 问题转换

从sql的角度理解,就是要按字段进行排序。

select * from orders order by price desc, orderTime asc;

3. 问题解决

3.1 声明order类

class Order(object):
  id:int
  price: float
  volume: float
  orderTime: float

3.2 造数据

from datetime import datetime
from time import sleep
def gen_order(id, price, volume):
    order = Order()
    order.volume = volume
    order.id = id
    order.price = price
    order.orderTime = datetime.today().timestamp()
    return order

order1 = gen_order(1, 10., 100.)
sleep(0.5)
order2 = gen_order(2, 10, 50.)
order3 = gen_order(3, 11., 100.)
orders = [order1, order2, order3]

3.3 编写排序代码

from operator import attrgetter
def mulit_sort(objs, specs):
    for key, reverse in specs:
      objs.sort(key=attrgetter(key), reverse=reverse)
    return objs

3.4 进行排序

说明:specs 的字段排序顺序与sql是反着来的

specs = [('orderTime', False), ('price', True)]
new_orders = mulit_sort(orders, specs)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查询集API 参...
    阳光小镇少爷阅读 9,265评论 0 8
  • 表 存储在表中的数据是同一种类型的数据或清单。 数据库中的表有为一个名字来标识自己。 表具有一些特性,这些特性定义...
    蛐蛐囍阅读 5,189评论 0 7
  • pyspark.sql module Module context Spark SQL和DataFrames中的重...
    盗梦者_56f2阅读 10,876评论 0 19
  • 文/午言 是时光霍霍磨平了我的棱角 还是岁月无情 给我披上了重重的枷锁 无有了以往的意气风发 丢失了曾经的豪言壮语...
    許勇阅读 3,184评论 0 8
  • 昨天我们回到奶奶家吃饭。吃完饭我们开始看一个很精彩的电视。那就是:主持人大赛了!我很喜欢这个主持人大赛。里面有李七...
    张宇琛阅读 1,472评论 0 0

友情链接更多精彩内容