#python #sorting
#python #сортировка
Вопрос:
Как вы сортируете список по элементу, который является кортежем? Допустим, ниже приведен список LL. Я хочу отсортировать ID2 — LL[1], который является кортежем, как asc. Как бы я это сделал.
Id, Id2 CCC
A123 A120 '2011-03'
LL= A133 A123 '2011-03'
D123 D120 '2011-04'
D140 D123 '2011-04'
Комментарии:
1.
ID2 -- LL[1] which is a tuple as asc
— что ?
Ответ №1:
Взгляните на http://wiki .python.org/moin/HowTo/Sorting /
sorted(LL, key=itemgetter(1))
может делать то, что вы хотите.
Пожалуйста, обратите внимание, что вы должны from operator import itemgetter
получить itemgetter
функцию.
In [1]: LL = (('A123', 'A120', '2011-03'), ('A133', 'A123', '2011-03'), ('D123', 'D120', '2011-04'), ('D140', 'D123', '2011-04'))
In [2]: from operator import itemgetter
In [3]: sorted(LL, key=itemgetter(1))
Out[3]:
[('A123', 'A120', '2011-03'),
('A133', 'A123', '2011-03'),
('D123', 'D120', '2011-04'),
('D140', 'D123', '2011-04')]
Комментарии:
1. Имеет ли значение, что key=itemgetter(1) является кортежем
2.
key=itemgetter(1)
заставитsorted()
извлекать элемент с индексом 1 из каждого элемента вLL
. Пожалуйста, прочитайте страницу, на которую я ссылался, она объясняет это: wiki. python.org/moin/HowTo/Sorting/#Operator_Module_Functions3. Я пытался разобраться в этом некоторое время. Я нашел свою проблему. База данных имеет отсортированный col в качестве первичного ключа, который постоянно меняет мой порядок. ;-)))))! Спасибо
Ответ №2:
Вы можете использовать:
LL.sort(ключ=лямбда x:x[1])
Где 1 — индекс элемента кортежа.
Комментарии:
1. Лучше использовать
itemgetter(1)
изoperator
модуля. В противном случае для каждого элемента необходимо вызвать функцию python (operator
функции написаны на C, если вы используете реализацию CPython по умолчанию)