可能重复:
如何为降序值编写Python排序键函数
在Python 3中,使用多个键按字典顺序对对象列表进行排序非常容易.例如:
items.sort(key = lambda obj: obj.firstname, obj.lastname)
该reverse参数允许您指定是要升序还是降序.但是,如果您想要按多个键排序,但是您想使用第一个键的降序排序,以及第二个键的升序排序,您会怎么做?
例如,假设我们有两个属性的对象,points并且name,在这里points是一个int和name是一个str.我们希望通过梳理这些对象的名单points在递减顺序(使之与点的数量最多的对象是第一位的),但与同等数量的对象points,我们希望通过梳理这些name字母(升序)的顺序.
怎么能实现这一目标?
在最近的Python版本中,将键函数传递给sort()前一个cmp函数的举动使得我对某些对象执行复杂的排序变得更加棘手.
例如,我想用一组字符串tie-breaker字段对从最新到最旧的一组对象进行排序.所以我希望日期顺序相反,但字符串按其自然顺序排列.使用比较函数,我可以反转日期字段与字符串字段的比较.但是通过关键功能,我需要找到一些方法来反转/反转日期或字符串.
使用数字很简单(虽然难看) - 只是从某些东西中减去它们 - 但我是否必须找到类似的日期(从另一个日期减去它们并比较timedeltas?)和字符串(...我不知道我如何以与语言环境无关的方式改变他们的顺序).
我知道functools.cmp_to_key()它的存在,但它被描述为"主要用作转换为Python 3的程序的转换工具,其中不再支持比较函数".这意味着我应该能够用关键方法做我想做的事 - 但是怎么做?