В python сортировка списка кортежей?

#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_Functions

3. Я пытался разобраться в этом некоторое время. Я нашел свою проблему. База данных имеет отсортированный col в качестве первичного ключа, который постоянно меняет мой порядок. ;-)))))! Спасибо

Ответ №2:

Вы можете использовать:

LL.sort(ключ=лямбда x:x[1])

Где 1 — индекс элемента кортежа.

Комментарии:

1. Лучше использовать itemgetter(1) из operator модуля. В противном случае для каждого элемента необходимо вызвать функцию python ( operator функции написаны на C, если вы используете реализацию CPython по умолчанию)