gpt4 book ai didi

python - 对具有多个属性的列表进行排序的 pythonic 方法是什么,这样第一个被反向排序而第二个不是?

转载 作者:太空宇宙 更新时间:2023-11-04 07:07:24 25 4
gpt4 key购买 nike

给定一个列表

[ ['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']]

关于python - 对具有多个属性的列表进行排序的 pythonic 方法是什么,这样第一个被反向排序而第二个不是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34970283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com