我有以下元組,其中包含的元組的元組:排序包含元組
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