我有这个数组
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))
但是,我不想使用最大的,因为我会一致地弹出和推入我的队列
您提供给
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))