我在列表列表或元組列表中都有一些數據,以下所示: 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