在最近的Python版本中,将键函数传递给sort()前一个cmp函数的举动使得我对某些对象执行复杂的排序变得更加棘手.
例如,我想用一组字符串tie-breaker字段对从最新到最旧的一组对象进行排序.所以我希望日期顺序相反,但字符串按其自然顺序排列.使用比较函数,我可以反转日期字段与字符串字段的比较.但是通过关键功能,我需要找到一些方法来反转/反转日期或字符串.
使用数字很简单(虽然难看) - 只是从某些东西中减去它们 - 但我是否必须找到类似的日期(从另一个日期减去它们并比较timedeltas?)和字符串(...我不知道我如何以与语言环境无关的方式改变他们的顺序).
我知道functools.cmp_to_key()它的存在,但它被描述为"主要用作转换为Python 3的程序的转换工具,其中不再支持比较函数".这意味着我应该能够用关键方法做我想做的事 - 但是怎么做?
好的,所以我有点问题,我是python的新手抱歉.
我试图按分数排序列表,这是一个数字,但如果有抽奖,我需要按照名称的长度对它们进行排序,名称越短,排名越高.
所以我在这里有这个清单
11 Jenny
8 Adam
10 Mark
8 Ada
Run Code Online (Sandbox Code Playgroud)
当我在这里使用这个代码时,它就会回来了
11 Jenny
10 Mark
10 Mark
10 Mark
def sort(names, counts):
newArr = []
newNames = names
newCount = counts
for x in range(0, len(names)):
newArr.append(findBiggest(newNames, newCount))
for z in range(0, len(names)):
name = newArr[len(newArr) - 1].split(" ")[1]
print name
if names[z] == name:
tempArr1 = newNames
tempArr2 = newCount
newNames = []
newCount = []
for y in range(0, len(tempArr1)):
if y != z:
newNames.append(tempArr1[y])
newCount.append(tempArr2[y])
return …Run Code Online (Sandbox Code Playgroud)