[Python] Riordinare un dizionario

Giovanni Porcari giovanni.porcari a softwell.it
Lun 24 Apr 2017 18:45:18 CEST


> Il giorno 24 apr 2017, alle ore 17:51, Marcello <marcello a linuxvil.it> ha scritto:
> 
> Ciao a tutti,
> 
> devo ordinare un dizionario in base al nome.
> Ho provato, cercando sul web, OrderedDict dovrebbe essere quello che fa al caso mio.
> 
> import collections
> diz = [{'add': '10', 'name': 'ccc', 'pwd': '12'}, {'add': '11', 'name': 'aaa', 'pwd': '45'}, {'add': '12', 'name': 'bbb', 'pwd': '79'}]
> print (collections.OrderedDict(sorted(diz.items(), key=lambda t: t[1])))
> 
> ma mi viene restituito un errore 
> AttributeError: 'list' object has no attribute 'items'
> 
> E' come se diz venisse visto come lista e non come dizionario.
> Dove sbaglio?






La cosa più simile a quello che stai facendo e che potrebbe funzionare è :

import collections
diz = [{'add': '10', 'name': 'ccc', 'pwd': '12'}, {'add': '11', 'name': 'aaa', 'pwd': '45'}, {'add': '12', 'name': 'bbb', 'pwd': '79'}]

print collections.OrderedDict([(d['name'],d) for d in sorted(diz, key=lambda t: t['name'])])

Ovvero ti costruisce un OrderdDict in cui la chiave è il 'name' e iol valore è il dizionario originale.
Quindi trasformi la lista di dizionari in un OrderedDict  ordinato in base alla elemento  'name' dei dizionari originali.


Se non ho capito nulla… abbi pazienza. Ci ho provato ;)


G


Maggiori informazioni sulla lista Python