Ответ 1
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]))
У меня есть следующий кортеж, который содержит кортежи:
MY_TUPLE = (
('A','Apple'),
('C','Carrot'),
('B','Banana'),
)
Я хотел бы отсортировать этот кортеж на основе значения second, содержащегося во внутренних кортежах (т.е. сортировать Apple, Carrot, 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]))
Часто есть встроенный, который будет соответствуют вашим потребностям, например 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)]
Надеюсь, что это поможет.
sorted(my_tuple, key=lambda tup: tup[1])
Другими словами, при сравнении двух элементов кортежа, которые вы сортируете, выполните сортировку на основе возвращаемого значения функции, переданной в качестве ключевого параметра.
Я получил то же самое, используя этот код, но ваше предложение замечательно. Спасибо!
templist = [ (line[1], line) for line in MY_TUPLE ]
templist.sort()
SORTED_MY_TUPLE = [ line[1] for line in templist ]