Python中先升序再降序排序,不带否定

问题描述 投票:0回答:1

我有这个清单:

L = [(1, 'a'), (4, 'k'), (3, 'p'), (3, 'q'), (2, 'a'), (2, 'b'), (1, 'z')]

我想按每个元组的第 0 个元素按升序排序,然后按第 1 个元素按降序排序。有什么方法可以做到吗? 我可以使用一般方法:

L.sort(key=lambda x: (x[0], -x[1]))

但这是不可能的,因为字符串没有 
-

操作。

我应该如何致电

sort

来获取我需要的东西?

    

python sorting
1个回答
0
投票
ord()

来获取单个字符的值。但是,如果您的数据包含多个字符的字符串,那么这就变得很笨拙。这种方法允许使用多字符(或仅单字符)字符串 因此:

L = [(1, 'a'), (4, 'k'), (3, 'p'), (3, 'q'), (2, 'a'), (2, 'b'), (1, 'z')] L2 = sorted(set(t[1] for t in L), reverse=True) def key(t): a, b = t return a, L2.index(b) print(sorted(L, key=key))

输出:

[(1, 'z'), (1, 'a'), (2, 'b'), (2, 'a'), (3, 'q'), (3, 'p'), (4, 'k')]

© www.soinside.com 2019 - 2024. All rights reserved.