(Python)按照namedtuple中最后一个元素的递减顺序排序

问题描述 投票:0回答:1

我试图按其最后一个'元素'按顺序(从最大到最小)对命名元组列表进行排序。这是我要排序的namedtuples列表的片段:

>>> 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找到。

谢谢,一些帮助将深表感谢!

python python-3.x sorting tuples namedtuple
1个回答
1
投票

您正在寻找以下内容:

sorted(total, key = lambda x: x.y, reverse = True)
© www.soinside.com 2019 - 2024. All rights reserved.