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):

python
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:
python
for k in sorted(d):
    print(f"{k}: {d[k]}")

# bart: marge
# lisa: skinner
# maggie: homer
# milhouse: nelson

Per ottenere un nuovo dizionario ordinato per chiave invece di un ciclo:

python
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:
python
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:

python
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.