python拾遺系列:python下list類型的排序

1. 問題梳理

由于業(yè)務(wù)的需要,需要對列表類型的進(jìn)行多列排序,問題梳理:

  • list 里存儲的是復(fù)雜對象
  • 需要支持多列排序、升序降序

2. 問題轉(zhuǎn)換

從sql的角度理解,就是要按字段進(jìn)行排序。

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 造數(shù)據(jù)

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 進(jìn)行排序

說明:specs 的字段排序順序與sql是反著來的

specs = [('orderTime', False), ('price', True)]
new_orders = mulit_sort(orders, specs)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容