2012-11-16 218 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