给定一个列表
[ ['a','b'], ['x','y'], ['a','y'], ['x', 'b'] ]
当第一个元素相等时,如何以第一个元素递减排序,但第二个元素递增排序的方式对其进行排序?此列表中的字符串可以任意长。
排序后的列表应该是
[ ['x', 'b'], ['x', 'y'], ['a', 'b'], ['a', 'y'] ]
我正在考虑使用一次 sorted 调用,但编写一个键来反射(reflect)这一点似乎行不通。
请您参考如下方法:
您可以对它进行两次排序(Python 使用稳定的排序,它在已经排序的部分上表现良好):
>>> l = [ ['a','b'], ['x','y'], ['a','y'], ['x', 'b'] ]
>>> sorted(sorted(l, key=lambda x: x[1]), key=lambda x: x[0], reverse=True)
[['x', 'b'], ['x', 'y'], ['a', 'b'], ['a', 'y']]
或者您可以使用 ord() 获取整数并将其取反:
>>> l = [ ['a','b'], ['x','y'], ['a','y'], ['x', 'b'] ]
>>> sorted(l, key=lambda x: (-ord(x[0]), x[1]))
[['x', 'b'], ['x', 'y'], ['a', 'b'], ['a', 'y']]
