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

新手上路,请多包涵

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

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

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

原文由 Amyth 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 249
2 个回答

尝试将 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] 的更快版本。

原文由 cheeken 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

在这种情况下,使用 itemgetter 的 IMO 比@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

原文由 jamylak 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题