排序包含元组的元组

12 投票
4 回答
13885 浏览
提问于 2025-04-11 18:46

我有一个包含元组的元组,具体内容如下:

MY_TUPLE = (
    ('A','Apple'),
    ('C','Carrot'),
    ('B','Banana'),
)

我想根据里面每个小元组的第二个值来对这个元组进行排序(也就是说,我想按苹果、胡萝卜、香蕉的顺序排序,而不是按字母A、B、C的顺序)。

有什么想法吗?

4 个回答

2
sorted(my_tuple, key=lambda tup: tup[1])

换句话说,当你在比较元组中的两个元素时,要根据作为关键参数传入的函数的返回值来进行排序。

7

来自 排序迷你指南

很多时候,Python里已经有现成的功能可以满足你的需求,比如 str.lower()。还有一个叫做 operator 的模块,里面有很多有用的函数。比如,你可以用 operator.itemgetter() 来根据元组的第二个元素进行排序:

>>> import operator 
>>> L = [('c', 2), ('d', 1), ('a', 4), ('b', 3)]
>>> map(operator.itemgetter(0), L)
['c', 'd', 'a', 'b']
>>> map(operator.itemgetter(1), L)
[2, 1, 4, 3]
>>> sorted(L, key=operator.itemgetter(1))
[('d', 1), ('c', 2), ('b', 3), ('a', 4)]

希望这对你有帮助。

25
from operator import itemgetter

MY_SORTED_TUPLE = tuple(sorted(MY_TUPLE, key=itemgetter(1)))
MY_SORTED_TUPLE = tuple(sorted(MY_TUPLE, key=lambda item: item[1]))

或者不使用 itemgetter

撰写回答