按第二项(整数值)对元组列表排序

2020-12-04 15:26:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个看起来像这样的元组列表:

[('abc', 121),('abc', 231),('abc', 148), ('abc',221)]

我想按元组内的整数值按升序排列这个列表。有可能吗?

3条回答
网友
1楼 ·
>>> from operator import itemgetter
>>> data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
>>> sorted(data,key=itemgetter(1))
[('abc', 121), ('abc', 148), ('abc', 221), ('abc', 231)]

在这种情况下,IMO使用itemgetter比@cheeken的解决方案更具可读性。它是 因为几乎所有的计算都是在c端完成的(不是双关语),而不是通过使用lambda

>python -m timeit -s "from operator import itemgetter; data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]" "sorted(data,key=itemgetter(1))"
1000000 loops, best of 3: 1.22 usec per loop

>python -m timeit -s "data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]" "sorted(data,key=lambda x: x[1])"
1000000 loops, best of 3: 1.4 usec per loop
网友
2楼 ·

加上契肯的回答, 这就是如何按降序中的第二项对元组列表进行排序的方法。

sorted([('abc', 121),('abc', 231),('abc', 148), ('abc',221)],key=lambda x: x[1], reverse=True)
网友
3楼 ·

尝试将key关键字与sorted()一起使用。

sorted([('abc', 121),('abc', 231),('abc', 148), ('abc',221)], key=lambda x: x[1])

key应该是一个函数,用于标识如何从数据结构中检索可比较元素。在您的例子中,它是元组的第二个元素,因此我们访问[1]

有关优化,请参见jamylak使用itemgetter(1)的响应,这实际上是lambda x: x[1]的更快版本。

相关问题