我在列表列表或元组列表中都有一些数据,以下所示: python
data = [[1,2,3], [4,5,6], [7,8,9]] data = [(1,2,3), (4,5,6), (7,8,9)]
我想按子集中的第二个元素排序。 意思是,按2,5,8排序,其中2
来自(1,2,3)
, 5
来自(4,5,6)
。 常见的作法是什么? 我应该在列表中存储元组或列表吗? 数组
from operator import itemgetter data.sort(key=itemgetter(1))
对元组进行排序很是简单: spa
tuple(sorted(t))
若是您想将数组从高到低排序,我只想添加到Stephen的答案中,除了上面的注释中的另外一种方法就是将其添加到行中: code
reverse = True
结果将以下所示: 排序
data.sort(key=lambda tup: tup[1], reverse=True)
sorted_by_second = sorted(data, key=lambda tup: tup[1])
要么: get
data.sort(key=lambda tup: tup[1]) # sorts in place
斯蒂芬的答案就是我会用的答案 。 为了完整起见,这是带有列表推导的DSU(装饰-排序-取消装饰)模式: it
decorated = [(tup[1], tup) for tup in data] decorated.sort() undecorated = [tup for second, tup in decorated]
或者,更简洁地说: io
[b for a,b in sorted((tup[1], tup) for tup in data)]
如Python Sorting HowTo中所述 ,自Python 2.4启用关键功能以来,就没有必要这样作 。 import