order = ['w','x','a','z']
[(object,'a'),(object,'x'),(object,'z'),(object,'a'),(object,'w')]
如何根据'order'提供的键列表,按第二个元素对上面的元组列表进行排序?
2013年11月18日更新:
我找到了一个更好的方法来解决这个问题的变体,其中密钥肯定是唯一的,在这个问题中详细说明:Python: using a dict to speed sorting of a list of tuples。
我的上述问题不太适用,因为元组的列表有两个元组,其键值为'a'
。
答案 0 :(得分: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
列表中缺少的键。