10
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 sort of a list of tuples

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

4

1 回答 1

13

您可以使用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结果列表的末尾。

于 2012-11-16T01:08:41.443 回答