【发布时间】:2021-05-25 03:48:48
【问题描述】:
Python3 删除了在排序时用于比较的cmp parameter,并将其替换为key。
cmp_to_key function 被引入“主要用作从 Python 2 转换的程序的转换工具”。
我不清楚如何使用key 在python3 中本地重新创建cmp 行为。例如,如果我想按长度对字符串进行排序,并按字典顺序使用决胜局,我会这样写:
def compare(word1, word2):
if len(word1) > len(word2):
return 1
if len(word2) > len(word1):
return -1
if word1 < word2:
return 1
if word2 < word1:
return -1
return 0
myStrings.sort(key=functools.cmp_to_key(compare), reverse=True)
如何以 python3-native 方式进行对象之间的比较,这意味着没有cmp_to_key?
我能想到的一件事是返回一个更复杂的键,例如:
# This would return something like 5.12 for "hello" and 5.20 for "world"
def myKey(word):
return len(word) + myLexicographicalValueFunction(word)/100
myStrings.sort(key=myKey, reverse=True)
但是当您添加更多变量进行比较时,这似乎不能很好地扩展。在python3中排序期间使用多个字段进行键评估的pythonic方法是什么?
【问题讨论】:
-
简而言之,“pythonic”的方式是让 key 函数返回一个值元组——每个值对应一个被比较的值——让 Python 的元组比较逻辑来处理。跨度>
标签: python python-3.x