2012-11-05 17 views
7

ho qualcosa di simileelenco dei dizionari annidati l'ordinamento in python

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

E avrei bisogno di avere:

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

Molte grazie!

MODIFICA: Vorrei ordinare per sottochiave1, questo non era chiaro in precedenza.

risposta

12

Utilizzare la parola chiave key al sorted() function e 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}}] 

Questo presuppone che tutti dizionari di livello superiore hanno una chiave key, che è si presume che sia un dizionario con una chiave subkey.

Vedere il Python Sorting HOWTO per ulteriori dettagli e trucchi.

0
sorted(yourdata, reverse=True) 
+0

non ho downvote questo, ma vi renderete conto che un 'dict' come un iterable restituisce le chiavi, quindi non si finisce con un elenco utile –

+0

non compreso. l'output proprio come chiesto. – alexvassel

+1

@alexvassel: L'output nel caso di esempio * simple * sembra essere lo stesso, ma se uno qualsiasi dei dizionari ha una chiave extra, i risultati saranno * molto * diversi in effetti. Non ho votato meno la tua risposta, ma * non è corretto su quell'account. –

0

Supponendo che si desidera ordinare il valore di d['key']['subkey'] per ogni dizionario d nella lista, utilizzare questo:

sorted(yourdata, key=lambda d: d.get('key', {}).get('subkey'), reverse=True) 
Problemi correlati