Mythar
Mythar

Reputation: 547

Python sort dictionary by a list of key values

I have a list of values that is the sort order:

order = ['foo', 'bar']
data = [{'name': 'bar', 'someData': 'someValue'}, {'name': 'foo', 'someData': 'someValue'}]

I would like to sort data (by 'name') based on order

Upvotes: 0

Views: 57

Answers (2)

bereal
bereal

Reputation: 34312

I would create an order mapping in advance to make the key function faster:

def create_key(order, field='name'):
    order_map={v: i for (i, v) in enumerate(order)} 
    def key(elem):
       return order_map[elem[field]]
    return key

data.sort(key=create_key(order))

Upvotes: 1

Christian Sloper
Christian Sloper

Reputation: 7510

you can go like this:

sorted(data, key = lambda x: order.index(x["name"]))

Upvotes: 2

Related Questions