我有一个元组列表,看起来像这样:
[('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
我想按元组内的整数值升序对这个列表排序。这可能吗?
我有一个元组列表,看起来像这样:
[('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
我想按元组内的整数值升序对这个列表排序。这可能吗?
当前回答
尝试使用keyword with sorted()。
sorted(
[('abc', 121), ('abc', 231), ('abc', 148), ('abc', 221)],
key=lambda x: x[1]
)
Key应该是一个函数,它确定如何从数据结构中检索可比较的元素。在你的例子中,它是元组的第二个元素,所以我们访问[1]。
关于优化,请参阅jamylak使用itemgetter(1)的响应,这本质上是lambda x: x[1]的更快版本。
其他回答
对于就地排序,使用
foo = [(list of tuples)]
foo.sort(key=lambda x:x[0]) #To sort by first element of the tuple
尝试使用keyword with sorted()。
sorted(
[('abc', 121), ('abc', 231), ('abc', 148), ('abc', 221)],
key=lambda x: x[1]
)
Key应该是一个函数,它确定如何从数据结构中检索可比较的元素。在你的例子中,它是元组的第二个元素,所以我们访问[1]。
关于优化,请参阅jamylak使用itemgetter(1)的响应,这本质上是lambda x: x[1]的更快版本。
作为一个python新手,我只是想提一下,如果数据确实是这样的:
data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
然后sorted()会自动按照元组中的第二个元素排序,因为第一个元素都是相同的。
对于避免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)