[英]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.