Python对末尾为零的字典排序列表

2024-04-27 14:44:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有零值的同构字典列表,但是它可以包含任何类型的值。示例:

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}]

有没有办法不重新设计轮子,让列表按python方法通常使用的“最小购买量”排序,但在列表末尾是“零”值,例如:

^{pr2}$

我试过用itemgetter

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

我觉得这里可以有一些“关键”参数的技巧


Tags: 方法id示例类型列表字典buyproduct
3条回答

关键功能你说得对。我添加了一个键函数,它按buy_qty排序,除非它不大于0,否则将其视为无穷大,本质上是将它移到末尾。在

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

您可以定义任何要用作排序的函数-可以在sorted之外,也可以在内部使用lambda。这样,您就可以进行例外处理(在本例中为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'))

相关问题 更多 >