我有一个看起来像这样的元组列表:
[('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
我想按元组内的整数值升序对这个列表进行排序。可能吗?
原文由 Amyth 发布,翻译遵循 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 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答972 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
尝试将
key
关键字与sorted()
一起使用。key
应该是一个函数,用于标识如何从数据结构中检索可比较的元素。在您的情况下,它是元组的第二个元素,因此我们访问[1]
。对于优化,请参阅 jamylak 使用
itemgetter(1)
的响应,它本质上是lambda x: x[1]
的更快版本。