python - 使用 heapq 进行反向字典顺序

标签 python string comparator heap lexicographic

本质上,我正在寻找一种使用 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/

相关文章:

python - 在一个单元格中转换具有多个值的数据框

python - 在 toctree 中使用 self 不包括子部分

Python切片从负数到正数

python - 将数字分解为其他数字

java - 在 Java 中使用比较器自定义排序字母数字字符串

python - 在 Spark 中获取上周一

python - 匹配nltk语法中的字母数字字符串

php - 如何在doctrine2实体中禁用字符串最大长度的隐式字符串修剪?

generics - 为什么对于具有相同模板值参数类型的比较器类型未定义 TreeMap 构造函数?

java - 我可以以某种方式排除或过滤掉 java 中 Collections.Min/Collections.Max 中的值吗?