Amy*_*yth 370 python tuples list
我有一个类似于下面的元组列表:
[('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
Run Code Online (Sandbox Code Playgroud)
我想按元组内的整数值按升序对此列表进行排序.可能吗?
che*_*ken 575
尝试使用key关键字sorted().
sorted([('abc', 121),('abc', 231),('abc', 148), ('abc',221)], key=lambda x: x[1])
Run Code Online (Sandbox Code Playgroud)
key应该是一个标识如何从数据结构中检索可比元素的函数.在你的情况下,它是元组的第二个元素,所以我们访问[1].
有关优化,请参阅jamylak的响应itemgetter(1),这实际上是一个更快的版本lambda x: x[1].
jam*_*lak 190
>>> 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)]
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
Vig*_*vel 41
添加到Cheeken的答案,这是按第二项降序排序元组列表的方法.
sorted([('abc', 121),('abc', 231),('abc', 148), ('abc',221)],key=lambda x: x[1], reverse=True)
Run Code Online (Sandbox Code Playgroud)
小智 40
作为一个python新手,我只是想提一下,如果数据确实看起来像这样:
data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
Run Code Online (Sandbox Code Playgroud)
然后sorted()会自动按元组中的第二个元素排序,因为第一个元素都是相同的.
Dmi*_*kin 15
来自python wiki:
>>> from operator import itemgetter, attrgetter
>>> sorted(student_tuples, key=itemgetter(2))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(student_objects, key=attrgetter('age'))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
Run Code Online (Sandbox Code Playgroud)
小智 13
对于就地排序,请使用
foo = [(list of tuples)]
foo.sort(key=lambda x:x[0]) #To sort by first element of the tuple
Run Code Online (Sandbox Code Playgroud)
小智 7
对于lambda避免方法,首先定义自己的函数:
def MyFn(a):
return a[1]
Run Code Online (Sandbox Code Playgroud)
然后:
sorted([('abc', 121),('abc', 231),('abc', 148), ('abc',221)], key=MyFn)
Run Code Online (Sandbox Code Playgroud)
对于Python 2.7+,这可以使接受的答案更具可读性:
sorted([('abc', 121),('abc', 231),('abc', 148), ('abc',221)], key=lambda (k, val): val)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
339228 次 |
| 最近记录: |