使用比较器函数进行排序

问题描述 投票:26回答:1

因此,我正在使用一些预先存在的比较器,它们比较两个元组中的某些值,如果第一个大于第二个,则返回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)。 我无法更改比较器功能。

python-2.7 sorting comparator
1个回答
36
投票

您正在通过比较器作为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,因此名称相当混乱。]

© www.soinside.com 2019 - 2024. All rights reserved.