为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

神不在的星期二 2019-06-25 16:31:00
按第二项(整数值)对元组列表进行排序我有一个元组列表,如下所示:[('abc', 121),('abc', 231),('abc', 148), ('abc',221)]我希望按照元组内的整数值对此列表进行升序排序。有可能吗?
查看完整描述

3 回答

?
开满天机

TA贡献1786条经验 获得超12个赞

尝试使用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].


查看完整回答
反对 回复 2019-06-25
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

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


查看完整回答
反对 回复 2019-06-25
?
RISEBY

TA贡献1856条经验 获得超5个赞

作为一名蟒蛇新手,我只想提一下,如果数据真的是这样的话:

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

然后sorted()将根据元组中的第二个元素自动排序,因为第一个元素都是相同的。


查看完整回答
反对 回复 2019-06-25
  • 3 回答
  • 0 关注
  • 910 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信