gpt4 book ai didi

python - 如何使用键参数(不是 cmp)以混合顺序对字符串的 2 元素元组进行排序

转载 作者:太空狗 更新时间:2023-10-29 22:05:58 25 4
gpt4 key购买 nike

在 Python 中,我有类似下面的东西(尽管是随机打乱的):

l = [('a', 'x'),
('a', 'y'),
('a', 'z'),
('b', 'x'),
('b', 'y'),
('b', 'z'),
]

如果我调用 sorted(l),我会得到一个排序后的结果(如上所示),这是人们所期望的。但是,我需要的是对元组的第一个 元素进行正向排序,对第二个 元素进行反向排序。换句话说,我想要以下结果:

l = [('a', 'z'),
('a', 'y'),
('a', 'x'),
('b', 'z'),
('b', 'y'),
('b', 'x'),
]

在Python2.x中,存在一个cmp参数,可以传递给sorted()来实现这个结果,但是Python3不再有这个。它只有一个 key 参数。有什么方法可以仅使用 key 参数来实现所需的排序顺序?

我知道我可以定义一个全新的类来包装我的元组,或者使用像 functools.cmp_to_key 这样的东西(它也创建了一个包装类),但是对于这样一个简单的手术。没有别的办法了吗?

编辑:我应该补充一点,字符串不会都是单字符字符串,并且在某些情况下,元组列表包含非字符串数据 [即(basestring, datetime)].

最佳答案

Python 中的排序是 stable从 Python 2.2 开始。

因此,您可以先按second 值排序,同时打开reverse 标志:

>>> from operator import itemgetter
>>> l.sort(key=itemgetter(1), reverse=True)
>>> l
[('a', 'z'), ('b', 'z'), ('a', 'y'), ('b', 'y'), ('a', 'x'), ('b', 'x')]

然后您可以按第一个值排序:

>>> l.sort(key=itemgetter(0))
>>> l
[('a', 'z'), ('a', 'y'), ('a', 'x'), ('b', 'z'), ('b', 'y'), ('b', 'x')]

关于python - 如何使用键参数(不是 cmp)以混合顺序对字符串的 2 元素元组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9133847/

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