Python 3中的排序函数
我想使用带有Python 3中的排序函数,python,python-3.x,sorting,Python,Python 3.x,Sorting,我想使用带有cmp函数的较旧python脚本,但它在Python3中不起作用。它引发了一个错误: TypeError: must use keyword argument for key function 我知道我应该避免使用cmp函数,而是使用key函数,但我不知道如何使用(我不懂Python,也不是程序员)。您能帮我根据您的要求更改以下部分吗 谢谢。只需返回正在排序的每个元组的第一个和最后一个元素,但要反转结果: ls.sort(key=lambda t: (res[t][0], res
cmp
函数的较旧python脚本,但它在Python3中不起作用。它引发了一个错误:
TypeError: must use keyword argument for key function
我知道我应该避免使用cmp
函数,而是使用key函数,但我不知道如何使用(我不懂Python,也不是程序员)。您能帮我根据您的要求更改以下部分吗
谢谢。只需返回正在排序的每个元组的第一个和最后一个元素,但要反转结果:
ls.sort(key=lambda t: (res[t][0], res[t][2]), reverse=True)
这正是
cmp
版本所比较的,但相反,sort()
方法也会这样做。使用ls.sort(key=functools.cmp_to_key(func))
。(list.sort
指的是这个)感谢您的回复。我现在试过了,但我收到了这样一条信息:“NameError:name'functools'未定义”@PaulRooney:这太过分了。没错,我不是在看他的代码,只是在看他如何使用他所拥有的。我添加了import functools
行,现在我得到了NameError:name'cmp'未定义
。不知怎么的,转换还不起作用。我收到此代码的“索引器:字符串索引超出范围”消息…@Sam updated,我错过了您的代码正在基于外部映射进行排序res
。亲爱的@Martijn Pieters:对不起,我不知道您编辑了您的答案。不幸的是,我和以前一样:“NameError:name'cmp'未定义”指向val=cmp((w2,t2),(w1,t1))
:(@Sam我的答案根本不使用cmp
。删除所有func
。啊,我明白了:)问题是,程序稍后试图调用func
函数,删除后,我收到一条“NameError:name'func'未定义”错误消息。
ls.sort(key=lambda t: (res[t][0], res[t][2]), reverse=True)