Aggiornato a ottobre 2026 per Python 3: da Python 3.7 un dizionario mantiene l’ordine di inserimento, quindi ordinarlo e riottenere un dizionario è diventato semplice.
In Python, i dizionari (dict) sono una struttura dati associativa che associa una chiave a un valore (k, v):
d = {}
d['bart'] = 'marge'
d['maggie'] = 'homer'
d['milhouse'] = 'nelson'
d['lisa'] = 'skinner'
>>> d
{'bart': 'marge', 'maggie': 'homer', 'milhouse': 'nelson', 'lisa': 'skinner'}Nel 2009, con Python 2, l’ordine delle chiavi in output era casuale. Da Python 3.7 è garantito l’ordine di inserimento, ma questo non vuol dire che il dizionario sia ordinato.
Esistono due modi di ordinare un dizionario:
- La modalità “classica” e più conosciuta: ovvero ordinare il dizionario sulla base delle chiavi che lo compongono:
for k in sorted(d):
print(f"{k}: {d[k]}")
# bart: marge
# lisa: skinner
# maggie: homer
# milhouse: nelsonPer ottenere un nuovo dizionario ordinato per chiave invece di un ciclo:
dict(sorted(d.items()))
# {'bart': 'marge', 'lisa': 'skinner', 'maggie': 'homer', 'milhouse': 'nelson'}- La modalità meno conosciuta e che ho dovuto ricercare [e che quindi condivido con voi], ovvero quella di ordinare il dizionario sulla base dei valori associati alle chiavi:
sorted(d.items(), key=lambda item: item[1])
# [('maggie', 'homer'), ('bart', 'marge'), ('milhouse', 'nelson'), ('lisa', 'skinner')]Come vedete questa volta abbiamo ottenuto una lista di coppie (chiave, valore) ordinate secondo il valore. Per riottenere un dizionario basta passarla a dict(); al posto della lambda si può usare operator.itemgetter, e reverse=True inverte l’ordine:
from operator import itemgetter
dict(sorted(d.items(), key=itemgetter(1)))
# {'maggie': 'homer', 'bart': 'marge', 'milhouse': 'nelson', 'lisa': 'skinner'}
dict(sorted(d.items(), key=itemgetter(1), reverse=True))
# {'lisa': 'skinner', 'milhouse': 'nelson', 'bart': 'marge', 'maggie': 'homer'}Attenzione: il dizionario ricorda l’ordine di inserimento ma non resta ordinato, e una chiave aggiunta dopo finisce in fondo.