(Python) Сортировка по убыванию последовательности последнего элемента в именованном кортеже - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь отсортировать список именованных кортежей по их последнему «элементу» в порядке убывания (от наибольшего к наименьшему). Вот фрагмент списка именованных кортежей, которые я пытаюсь отсортировать:

>>> a =[]
>>> a += [p]
>>> a
[Point(x=11, y=22)]
>>> total = []
>>> b = Point(1,33)
>>> b
Point(x=1, y=33)
>>> c = Point(99, 2)
>>> total += [b] + [c] + [p]
>>> total
[Point(x=1, y=33), Point(x=99, y=2), Point(x=11, y=22)]
>>> sorted(total, key = lambda x: x[y], reverse = True)
Traceback (most recent call last):
  File "<pyshell#26>", line 1, in <module>
    sorted(total, key = lambda x: x[y], reverse = True)
  File "<pyshell#26>", line 1, in <lambda>
    sorted(total, key = lambda x: x[y], reverse = True)
NameError: name 'y' is not defined
>>> sorted(total, key = lambda x: x['y'], reverse = True)
Traceback (most recent call last):
  File "<pyshell#27>", line 1, in <module>
    sorted(total, key = lambda x: x['y'], reverse = True)
  File "<pyshell#27>", line 1, in <lambda>
    sorted(total, key = lambda x: x['y'], reverse = True)
TypeError: tuple indices must be integers or slices, not str

Однако я продолжаю получать сообщения об ошибках выше. Есть ли способ сделать это для таких экземпляров namedtuple?

В качестве приблизительного примера, список именованных кортежей - total, и я пытаюсь отсортировать кортежи от наибольшего y до наименьшего y. Таким образом, результат должен выглядеть примерно так:

>>> total
[Point(x=1, y=33), Point(x=11, y=22), Point(x=99, y=2)]

Документацию для namedtuple можно найти по адресу: https://docs.python.org/3/library/collections.html#collections.namedtuple.

Спасибо и некоторая помощь будет высоко оценена!

1 Ответ

0 голосов
/ 05 сентября 2018

Вы ищете следующее:

sorted(total, key = lambda x: x.y, reverse = True)
...