我有以下元组,其中包含的元组的元组:排序包含元组
MY_TUPLE = (
('A','Apple'),
('C','Carrot'),
('B','Banana'),
)
我想排序基于包含在内部元组(即,第二值该元组,分类苹果,胡萝卜,香蕉而不是A,B,C)。
有什么想法?
我有以下元组,其中包含的元组的元组:排序包含元组
MY_TUPLE = (
('A','Apple'),
('C','Carrot'),
('B','Banana'),
)
我想排序基于包含在内部元组(即,第二值该元组,分类苹果,胡萝卜,香蕉而不是A,B,C)。
有什么想法?
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]))
sorted(my_tuple, key=lambda tup: tup[1])
换句话说,比较你整理的元组的两个元素时,排序依据为重点,通过函数的返回值参数。
通常有一个内置的,将 满足您的需求,如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)]
希望这有助于。
我用这段代码实现了同样的事情,但是你的建议很棒。谢谢!
templist = [ (line[1], line) for line in MY_TUPLE ]
templist.sort()
SORTED_MY_TUPLE = [ line[1] for line in templist ]
注意:如果您排序的值可能有重复项,您可以通过为[`itemgetter`]提供附加参数来回退到另一个值(http://docs.python.org/library/ operator.html#operator.itemgetter),例如`itemgetter(1,0)`。 – 2011-12-03 18:22:43
应该是“从运营商导入itemgetter”。 – paragbaxi 2012-04-12 22:19:37