2012-11-16 204 views
9
order = ['w','x','a','z'] 
[(object,'a'),(object,'x'),(object,'z'),(object,'a'),(object,'w')] 

如何根據'order'提供的鍵列表對第二個元素排序上面的元組列表?在13年11月18日通過任意鍵排序元組的排序列表

UPDATE:

,我發現這個問題,其中的關鍵是一定是唯一的變化,在這個問題上詳述一個更好的方法:Python: using a dict to speed sorting of a list of tuples

我上面的問題並不完全適用,因爲給出的元組列表有兩個元組,鍵值爲'a'

+0

你能舉一個你期待結果的樣子嗎? – enginefree

回答

11

您可以使用sorted,並給出key函數,該函數返回order列表中每個元組的第二個值的索引。

>>> sorted(mylist,key=lambda x: order.index(x[1])) 

[('object', 'w'), ('object', 'x'), ('object', 'a'), ('object', 'a'), ('object', 'z')] 

當心,每當從所述元組的值是不order列表中存在失敗。

編輯:

爲了更安全一點,你可以使用:

sorted(mylist,key=lambda x: x[1] in order and order.index(x[1]) or len(order)+1) 

這將會把所有條目與從order列表中的末尾缺少一個關鍵結果列表。

+0

最後的編輯非常有幫助,因爲現在我可以以非常優雅的方式讓排序失敗。謝謝! – Cole