在Python中使用heapq处理平局断路器

问题描述 投票:0回答:1

我有这个数组

values = [("aaa", 10), ("bbb", 10), ("ccc", 10), ("David", 15)]

我想将它们添加到优先级队列中。对于每个值,我想按值[1](数字)排序,然后如果它是平局(例如

("aaa", 10), ("bbb", 10)
),我想按值[0](字符串)按字典顺序排序

我尝试过这样做

def compareValAndName(a, b):
    if a[1] == b[1]:
        if a[0] < b[0]:
            return 1
        else:
            return -1
    return a[1] - b[1]
    
n_largest = heapq.nlargest(5, values, key=cmp_to_key(compareValAndName))

但是,我不想使用最大的,因为我会一致地弹出和推入我的队列

python sorting heapq
1个回答
0
投票

您提供给

key
参数的函数仅采用一个参数。

您可以通过提供值元组来提供密钥。在这种情况下,只需反转您正在排序的元组中的值即可。

n_largest = heapq.nlargest(5, values, key=lambda x: (x[1], x[0]))

正如评论中所述,

operator.itemgetter
提供了另一种选择:

n_largest = heapq.nlargest(5, values, key=itemgetter(1, 0))
© www.soinside.com 2019 - 2024. All rights reserved.