Come ordinare un dizionario per valore in Python

Scopri come ordinare un dizionario Python in base ai suoi valori. Scopri l'ordinamento utilizzando sorted(), chiavi lambda personalizzate e la creazione di strutture dict ordinate.

Prova questa soluzione nell'editor

Panoramica

Sebbene i dizionari siano creati principalmente per operazioni di ricerca rapida utilizzando chiavi univoche, spesso sarà necessario ordinare gli elementi del dizionario in base ai loro valori. Ad esempio, ordinando gli studenti in base ai voti degli esami, elencando i prodotti dal più economico al più costoso o ordinando il conteggio delle parole in base alla frequenza.

In Python, non puoi ordinare direttamente un dizionario sul posto perché le strutture dei dizionari standard non supportano metodi di ordinamento come gli elenchi. Invece, l'approccio standard è quello di recuperare gli elementi del dizionario come tuple utilizzando il metodo `.items()`, ordinare tali tuple utilizzando la funzione incorporata `sorted()` con una chiave di ordinamento personalizzata, quindi ricostruire il dizionario dagli elementi ordinati.

La chiave di ordinamento è in genere una funzione lambda che restituisce il secondo elemento della tupla (il valore del dizionario): `key=lambda item: item[1]`. A partire daPython 3.7+, i dizionari standard mantengono l'ordine di inserimento. Ritrasformare l'elenco ordinato di tuple in un dizionario utilizzando il costruttore `dict()` restituisce un dizionario pulito e ordinato, pronto per l'iterazione.

Codice e output di esecuzione

Questo script dimostra l'ordinamento di un dizionario dei punteggi dei test in base ai valori sia in ordine ascendente che discendente utilizzando le funzioni lambda.

sort_dict_values.py
Prova nell'editor
scores = {"Alice": 88, "Bob": 75, "Charlie": 95, "David": 82}
print("Original dictionary:", scores)

# 1. Sort by values (ascending order)
sorted_ascending = dict(sorted(scores.items(), key=lambda item: item[1]))
print("Sorted ascending:", sorted_ascending)

# 2. Sort by values (descending order)
sorted_descending = dict(sorted(scores.items(), key=lambda item: item[1], reverse=True))
print("Sorted descending:", sorted_descending)

# 3. sorting by keys for comparison
sorted_keys = dict(sorted(scores.items(), key=lambda item: item[0]))
print("Sorted by keys:", sorted_keys)
Uscita terminale
Original dictionary: {'Alice': 88, 'Bob': 75, 'Charlie': 95, 'David': 82}
Sorted ascending: {'Bob': 75, 'David': 82, 'Alice': 88, 'Charlie': 95}
Sorted descending: {'Charlie': 95, 'Alice': 88, 'David': 82, 'Bob': 75}
Sorted by keys: {'Alice': 88, 'Bob': 75, 'Charlie': 95, 'David': 82}

Implementazione passo dopo passo

  • Chiama my_dict.items() per recuperare le coppie chiave-valore come un elenco di tuple.
  • Passa gli elementi del dizionario alla funzione sorted().
  • Specificare key=lambda item: item[1] per indicare alla funzione sorted() di ordinare in base al valore (secondo elemento di ogni tupla).
  • Passa reverse=True come argomento facoltativo per ordinare gli elementi in ordine decrescente.
  • Ricostruisci il dizionario ordinato passando l'elenco ordinato di tuple al costruttore dict().

Domande frequenti

Cosa significa key=lambda item: item[1]?

La funzione sorted() passa ogni elemento della sequenza degli elementi (una tupla di (chiave, valore)) alla funzione lambda. item[1] estrae il componente valore, dicendo a Python di ordinare le tuple in base al valore.

L'ordinamento di un dizionario influisce sulla velocità di ricerca delle chiavi?

No, le ricerche chiave rimangono di complessità temporale media O (1) perché l'ordinamento modifica solo la sequenza di iterazione, non la struttura della tabella hash sottostante.

Argomenti correlati

Risorse Python consigliate

Espandi le tue conoscenze con tutorial interattivi, foglietti illustrativi e confronti di codici correlati.