按任意键排序元组列表

时间:2012-11-16 01:04:45

标签: python

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'

1 个答案:

答案 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列表中缺少的键。