使用 heapq 反向字典顺序

Reverse lexicographical using heapq

本质上,我正在寻找一种使用 heapq.

实现自定义比较器的有效方法

例如x = [('a',5),('c',3),('d',2),('e',1)]

我可以堆化它 heapq.heapify(x),然后弹出最小值 heapq.heappop(x),这将 return ('a', 5)。我怎样才能使它 return 以相反的字典顺序排列 ('e', 1)? 我知道涉及数字的约定是简单地将元组的第一个元素乘以 -1。当涉及到字符串时,是否有像这样的简单技巧?我知道我可能会实现从 a 到 z ... z 到 a 的映射,但这听起来很麻烦。

对于数字,您可以这样做:

import heapq

x = [(1, 5), (3, 3), (4, 2), (5, 1)]
x = [(-a, b) for a, b in x]
heapq.heapify(x)
result = heapq.heappop(x)
result = (-result[0], result[1])

同样,我会用字母来做这个:

import heapq

x = [('a',5), ('c',3), ('d',2), ('e',1)]
x = [(-ord(a), b) for a, b in x]
heapq.heapify(x)
result = heapq.heappop(x)
result = (chr(-result[0]), result[1])

您可能还想对每个元组的第二个元素进行类似处理