猿问

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

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

我有一个元组列表,如下所示:

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

我希望按照元组内的整数值对此列表进行升序排序。有可能吗?


神不在的星期二
浏览 934回答 3
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].

一只斗牛犬

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

RISEBY

作为一名蟒蛇新手,我只想提一下,如果数据真的是这样的话:data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]然后sorted()将根据元组中的第二个元素自动排序,因为第一个元素都是相同的。
随时随地看视频慕课网APP

相关分类

Python
我要回答