sorting list of tuples by arbitrary key

python

Solution

You can use `sorted`, and give as the `key` a function that returns the index of the second value of each tuple in the `order` list.

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

[('object', 'w'), ('object', 'x'), ('object', 'a'), ('object', 'a'), ('object', 'z')]

Beware, this fails whenever a value from the tuples is not present within the `order` list.

Edit:

In order to be a little more secure, you could use :

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

This will put all entries with a key that is missing from `order` list at the end of the resulting list.

Problem

``` order = ['w','x','a','z'] [(object,'a'),(object,'x'),(object,'z'),(object,'a'),(object,'w')] ``` How do I sort the above list of tuples by the second element according the the key list provided by 'order'? UPDATE on 11/18/13: I found a much better approach to a variation of this question where the keys are certain to be unique, detailed in this question: Python: using a dict to speed sorting of a list of tuples. My above question doesn't quite apply because the give list of tuples has two tuples with the key value of `'a'`.

Original source

Related problems