如果我有一个列表,其中包含一个看起来像这样的列表......
['a',1] ['a',2] ['a',3] ['b',1] ['b',2] ['b',3]
Run Code Online (Sandbox Code Playgroud)
我如何对它们进行排序,以便元素0按降序排序,元素1按升序排序,因此结果看起来像......
['b',1] ['b',2] ['b',3] ['a',1] ['a',2] ['a',3]
Run Code Online (Sandbox Code Playgroud)
使用itemgetter我可以在元素0上反向传递,但是我然后使用元素,当然它会破坏前一种类型.我不能做一个组合键,因为它需要先降序然后升序.
TIA,PK
在最近的Python版本中,将键函数传递给sort()前一个cmp函数的举动使得我对某些对象执行复杂的排序变得更加棘手.
例如,我想用一组字符串tie-breaker字段对从最新到最旧的一组对象进行排序.所以我希望日期顺序相反,但字符串按其自然顺序排列.使用比较函数,我可以反转日期字段与字符串字段的比较.但是通过关键功能,我需要找到一些方法来反转/反转日期或字符串.
使用数字很简单(虽然难看) - 只是从某些东西中减去它们 - 但我是否必须找到类似的日期(从另一个日期减去它们并比较timedeltas?)和字符串(...我不知道我如何以与语言环境无关的方式改变他们的顺序).
我知道functools.cmp_to_key()它的存在,但它被描述为"主要用作转换为Python 3的程序的转换工具,其中不再支持比较函数".这意味着我应该能够用关键方法做我想做的事 - 但是怎么做?