本质上,我正在寻找一种使用 heapq
实现自定义比较器的有效方法。
例如x = [('a',5),('c',3),('d',2),('e',1)]
我可以将其堆化heapq.heapify(x)
,然后弹出最小值heapq.heappop(x)
,这将返回('a', 5 )
。我怎样才能使它以相反的字典顺序返回('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])
您可能还想以类似的方式处理每个元组的第二个元素
关于python - 使用 heapq 进行反向字典顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70900746/