我有一个元组列表,看起来像这样:
[('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
我想按元组内的整数值升序对这个列表排序。这可能吗?
我有一个元组列表,看起来像这样:
[('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
我想按元组内的整数值升序对这个列表排序。这可能吗?
当前回答
>>> 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
其他回答
对于避免lambda的方法,首先定义自己的函数:
def MyFn(a):
return a[1]
然后:
sorted([('abc', 121),('abc', 231),('abc', 148), ('abc',221)], key=MyFn)
在奇肯的回答中, 这就是按第二项降序排序元组列表的方法。
sorted([('abc', 121),('abc', 231),('abc', 148), ('abc',221)],key=lambda x: x[1], reverse=True)
对于Python 2.7+,这可以使接受的答案更具可读性:
sorted([('abc', 121),('abc', 231),('abc', 148), ('abc',221)], key=lambda (k, val): val)
作为一个python新手,我只是想提一下,如果数据确实是这样的:
data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
然后sorted()会自动按照元组中的第二个元素排序,因为第一个元素都是相同的。
对于就地排序,使用
foo = [(list of tuples)]
foo.sort(key=lambda x:x[0]) #To sort by first element of the tuple