对包含元组的元组进行排序

时间:2008-10-21 17:40:52

标签: python sorting tuples

我有以下元组,其中包含元组:

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

我想根据内部元组中包含的 second 值来排序这个元组(即,排序Apple,Carrot,Banana而不是A,B,C)。

有什么想法吗?

4 个答案:

答案 0 :(得分:22)

from operator import itemgetter

MY_SORTED_TUPLE = tuple(sorted(MY_TUPLE, key=itemgetter(1)))

或没有itemgetter

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

答案 1 :(得分:7)

来自Sorting Mini-HOW TO

  

通常会有一个内置的   符合您的需求,例如str.lower()。   操作员模块包含一个数字   有用的功能。   例如,您可以基于元组排序   在他们的第二个元素使用   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)]

希望这有帮助。

答案 2 :(得分:2)

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

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

答案 3 :(得分:-2)

我使用此代码实现了相同的功能,但您的建议很棒。谢谢!

templist = [ (line[1], line) for line in MY_TUPLE ] 
templist.sort()
SORTED_MY_TUPLE = [ line[1] for line in templist ]