python - 使用比较器函数进行排序

标签 python sorting comparator

所以我正在使用一些预先存在的比较器来比较两个元组中的某些值,如果第一个大于第二个则返回 true,否则返回 false。这是其中之一的代码:

def cmpValue(subInfo1, subInfo2):
    """
    Returns True if value in (value, work) tuple subInfo1 is GREATER than
    value in (value, work) tuple in subInfo2
    """
    # TODO...
    if subInfo1[0] > subInfo2[0]:
        return True
    else:
        return False

现在,我有一个字典,其中包含许多上面比较类型的元组条目。我想以相反的顺序对它们进行排序,但我真的不明白我将如何做到这一点。我在想这样的事情:

sortedDict = sorted(subjects, key=comparator, reverse = True)

但我不知道将什么传递给比较器,因为每个比较器都有两个参数(subInfo1、subInfo2)。 我无法更改比较器功能。

最佳答案

您将比较器作为 key 函数传递。您应该将它作为 cmp 传递,并包装在某种函数中,将其变成适当的比较器。

def make_comparator(less_than):
    def compare(x, y):
        if less_than(x, y):
            return -1
        elif less_than(y, x):
            return 1
        else:
            return 0
    return compare

sortedDict = sorted(subjects, cmp=make_comparator(cmpValue), reverse=True)

(虽然实际上,您应该使用关键功能:

sorted(subjects, operator.itemgetter(0), reverse=True)

还要注意,sortedDict 实际上并不是一个dict,所以这个名字相当困惑。)

关于python - 使用比较器函数进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12749398/

相关文章:

python - 检查列表是否在列表列表中

C - 先按月然后按天对一年的数据进行排序

arrays - 自定义排序 Groovy JSONArray - 首先自定义值,然后按字母顺序

java - java中compareTo方法返回什么

Java 泛型 : Collections. max() 签名和比较器

java - 如何使用比较器(用于二分搜索)将 DateTime 与对象中的 DateTime 字段进行比较?

python - 有没有办法测试 SQLAlchemy 连接?

python - 使用 Numba 使四个嵌套 for 循环更快

python - 从以两个十六进制字符串传输的 C double 转换

Java 数据结构在强制执行最大元素数的同时保持排序顺序