Сортировать список кортежей в Python, где список кортежей - PullRequest
0 голосов
/ 01 апреля 2020

Здесь почти такой же вопрос задается здесь , но мой вопрос немного другой. Допустим, у меня есть текущий список:

my_list = [('a', [0.2, 0.28, 0.3]), ('b', [-0.09, 0.37, 0.4])]

Я пытаюсь отсортировать этот список по вторым элементам кортежей, то есть по убыванию 0,28 и 0,37. Это то, что я имею до сих пор, что не правильно.

import operator
my_list.sort(key = operator.itemgetter(1), reverse = True)
print(my_list)
[('a', [0.2, 0.28, 0.3]), ('b', [-0.09, 0.37, 0.4])]

Я могу придумать неэффективный способ, но я имею дело с большим набором данных и стараюсь быть максимально эффективным. Спасибо

Ответы [ 2 ]

4 голосов
/ 01 апреля 2020

Вы можете сделать:

my_list.sort(key=lambda x: x[1][1], reverse=True)

Почему вы получаете свой вывод?

operator.itemgetter(1) - это только второй элемент каждого кортежа, который это список, а не второй элемент этого списка. Вы передаете неправильную key в sort функцию.

Вы должны проиндексировать дважды, как в коде выше. Первый индекс, чтобы получить список внутри кортежа, затем индекс, чтобы получить второй элемент списка.

2 голосов
/ 01 апреля 2020

Например, список [0.2, 0.28, 0.3] является элементом 1 кортежа ('a', [0.2, 0.28, 0.3]) на верхнем уровне того, что вы сортируете. 0.28, на основе которого вы хотите выполнить сортировку, это элемент 1 из that ; поэтому вы хотите отсортировать данные на основе индексации, например [1][1]. operator.itemgetter не будет выполнять несколько таких шагов индексирования, но вы можете определить это вручную:

my_list.sort(key=lambda element:element[1][1], reverse=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...