Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sorting list of nested dictionaries in python

I have something like

[
    {
        "key": { "subkey1":1, "subkey2":"a"  }
    },
    {
        "key": { "subkey1":10, "subkey2":"b" }
    },
    {
        "key": { "subkey1":5, "subkey2":"c" }
    }
]

And would need to have :

[
    {
        "key": { "subkey1":10, "subkey2":"b" }
    },
    {
        "key": { "subkey1":5, "subkey2":"c" }
    },
    {
        "key": { "subkey1":1, "subkey2":"a" }
    }
]

Many thanks!

EDIT : I'd like to sort by subkey1, this wasn't clear previously.

like image 445
L-R Avatar asked Nov 05 '12 18:11

L-R


2 Answers

Assuming you want to sort by the value of d['key']['subkey'] for every dictionary d in the list, use this:

sorted(yourdata, key=lambda d: d.get('key', {}).get('subkey'), reverse=True)
like image 161
Platinum Azure Avatar answered Sep 17 '22 06:09

Platinum Azure


Use the key keyword to the sorted() function and sort() method:

yourdata.sort(key=lambda e: e['key']['subkey'], reverse=True)

Demo:

>>> yourdata = [{'key': {'subkey': 1}}, {'key': {'subkey': 10}}, {'key': {'subkey': 5}}]
>>> yourdata.sort(key=lambda e: e['key']['subkey'], reverse=True)
>>> yourdata
[{'key': {'subkey': 10}}, {'key': {'subkey': 5}}, {'key': {'subkey': 1}}]

This assumes that all top-level dictionaries have a key key, which is assumed to be a dictionary with a subkey key.

See the Python Sorting HOWTO for more details and tricks.

like image 45
Martijn Pieters Avatar answered Sep 18 '22 06:09

Martijn Pieters