按任意键排序元组列表

Col*_*ole 9 python

order = ['w','x','a','z']
[(object,'a'),(object,'x'),(object,'z'),(object,'a'),(object,'w')]
Run Code Online (Sandbox Code Playgroud)

如何根据"order"提供的键列表按第二个元素对上面的元组列表进行排序?

2013年11月18日更新:

我找到了一个更好的方法来解决这个问题的变化,其中键肯定是唯一的,在这个问题中详细说明:Python:使用dict来加速元组列表的排序.

我的上述问题不太适用,因为元组的列表有两个元组,其键值为'a'.

Jul*_*not 11

您可以使用sorted,并作为key返回order列表中每个元组的第二个值的索引的函数.

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

[('object', 'w'), ('object', 'x'), ('object', 'a'), ('object', 'a'), ('object', 'z')]
Run Code Online (Sandbox Code Playgroud)

请注意,只要order列表中没有元组中的值,就会失败.

编辑:

为了更安全一点,您可以使用:

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

这将使所有条目order在结果列表的末尾具有列表中缺少的键.