簡體   English   中英

Python的字典排序列表,最后為零值

[英]Python sort list of dictionary with zero values at the end

我有一個零值的同義字典列表,但它可以包含任何類型的值。 例:

values=[{'buy_qty': 15, 'product_id': 30}, {'buy_qty': 0,'product_id': 33},{'buy_qty': 25, 'product_id': 50}, {'buy_qty': 7, 'product_id': 22}]

有沒有辦法沒有重新發明輪子獲取列表排序的'最小'buy_qty“通常為python方式,但列表末尾的”零“值,如下所示:

values=[{'buy_qty': 7, 'product_id': 22}, {'buy_qty': 15, 'product_id': 30}, {'buy_qty': 25, 'product_id': 50}, {'buy_qty': 0,'product_id': 33}]

我試過過itemgetter,

sorted(total_lines, key=itemgetter('buy_qty'))

我覺得這里可以使用“key”參數進行一些技巧

關鍵功能你是對的。 我添加了一個按buy_qty排序的關鍵函數,除非它不大於零然后將其視為無窮大,基本上將其移至最后。

 sorted(values, key = lambda x: x['buy_qty'] if x['buy_qty'] > 0 else float('inf'))

您可以定義要用作排序的任何函數 - 在sorted之外或使用lambda sorted在內部。 這樣,您可以設置例外(在這種情況下為0數量)

 sorted(values, key=lambda x: x['buy_qty'] if x['buy_qty'] > 0 else float('Inf'))

使用自定義比較功能。

def custom_comparator(item1, item2):
    if item1 == item2:
            return 0
    elif 0 < item1 < item2 or item2 == 0:
            return -1
    else:
            return 1

 sorted(total_lines, cmp=custom_comparator, key=itemgetter('buy_qty'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM