Vai al contenuto principale

Come ordinare un dizionario per valori in Python

Scopri metodi efficienti per ordinare un dizionario per valori in Python. Esplora l'ordinamento crescente e decrescente e consigli extra per l'ordinamento per chiavi.
· 5 min leggi

Scopri con l'IA

L'ordinamento è un'operazione fondamentale nella manipolazione dei dati, e i dizionari in Python non fanno eccezione. Che si tratti di un progetto complesso di analisi dei dati o di uno script semplice, capire come ordinare in modo efficiente un dizionario per valore può essere estremamente utile.

In questo articolo analizziamo i vari metodi per ordinare i dizionari in base ai loro valori in Python, così da avere gli strumenti per organizzare i dati come ci serve.

La risposta breve: come ordinare un dizionario per valore in Python

Per ordinare rapidamente un dizionario per valore, possiamo usare la funzione integrata di Python .sorted() in combinazione con una funzione lambda. Questo metodo è semplice ed efficiente nella maggior parte dei casi.

student_scores = {
    'Alex': 88,
    'Ben': 75,
    'Cyrus': 93,
    'Denver': 85
}
sorted_by_values = dict(sorted(student_scores.items(), key=lambda item: item[1]))

print(sorted_by_values)

# Expected output:
# {'Ben': 75, 'Denver': 85, 'Alex': 88, 'Cyrus': 93}

Ora facciamo un passo indietro per capire cosa sono i dizionari in Python e perché potremmo aver bisogno di ordinarli.

Cosa sono i dizionari in Python?

I dizionari in Python sono una struttura dati che memorizza dati in coppie chiave-valore. Sono molto versatili e consentono ricerche, inserimenti e cancellazioni veloci. Ecco un semplice esempio:

student_scores = {
    'Alex': 88,
    'Ben': 75,
    'Cyrus': 93,
    'Denver': 85
}

# No expected output

Nel dizionario qui sopra, i nomi degli studenti sono le chiavi e i loro punteggi sono i valori. 

I dizionari sono utili in molti scenari, ad esempio quando dobbiamo archiviare e recuperare dati in modo efficiente. Tuttavia, a volte è necessario ordinare questi dati per valori e non per chiavi, per esempio quando vogliamo classificare gli studenti in base ai loro punteggi.

Come ordinare un dizionario per valore in Python

Ora diamo uno sguardo più da vicino alla funzione .sorted() in Python e a come usarla nello specifico per ordinare i dizionari per valore.

Come ordinare un dizionario per valore usando .sorted()

La funzione .sorted() è uno strumento potente e flessibile per l'ordinamento in Python. Per ordinare un dizionario in base ai suoi valori, possiamo usare una funzione lambda per specificare che l'ordinamento deve basarsi sui valori del dizionario.

student_scores = {
    'Alex': 88,
    'Ben': 75,
    'Cyrus': 93,
    'Denver': 85
}
sorted_by_values = dict(sorted(student_scores.items(), key=lambda item: item[1]))

print(sorted_by_values)

# Expected output: 
# {'Ben': 75, 'Denver': 85, 'Alex': 88, 'Cyrus': 93}

In questo esempio, student_scores.items() restituisce un oggetto vista che mostra una lista delle coppie chiave-valore del dizionario come tuple. La funzione .sorted() ordina queste coppie in base ai valori (item[1]), e dict() converte la lista ordinata di nuovo in un dizionario.

Come ordinare un dizionario per valore in ordine decrescente o crescente

Per impostazione predefinita, la funzione .sorted() ordina in ordine crescente. Tuttavia, a seconda della situazione, possiamo modificare facilmente questo comportamento per ordinare in ordine decrescente o crescente impostando il parametro reverse su True o False.

Come ordinare un dizionario in ordine crescente

Come detto, un dizionario verrà ordinato in ordine crescente per impostazione predefinita quando si usa la funzione .sorted(). Possiamo ottenere l'ordine crescente anche impostando il parametro reverse su False.

sorted_by_values_asc = dict(sorted(student_scores.items(), key=lambda item: item[1], reverse=False))
print(sorted_by_values_asc)

# Expected output:
# {'Ben': 75, 'Denver': 85, 'Alex': 88, 'Cyrus': 93}

Come ordinare un dizionario in ordine decrescente

Se vogliamo ordinare in ordine decrescente, possiamo impostare il parametro reverse su True.

sorted_by_values_desc = dict(sorted(student_scores.items(), key=lambda item: item[1], reverse=True))
print(sorted_by_values_desc)

# Expected output:
# {'Cyrus': 93, 'Alex': 88, 'Denver': 85, 'Ben': 75}

Bonus: come ordinare un dizionario per chiave in Python

Sebbene questo articolo sia incentrato sull'ordinamento per valori, è utile sapere anche come ordinare un dizionario per chiavi. Si può fare in modo analogo usando la .sorted().

sorted_by_keys = dict(sorted(student_scores.items()))
print(sorted_by_keys)

# Expected output:
# {'Alex': 88, 'Ben': 75, 'Cyrus': 93, 'Denver': 85}

Per l'ordine decrescente, imposta semplicemente reverse=True:

sorted_by_keys_desc = dict(sorted(student_scores.items(), reverse=True))
print(sorted_by_keys_desc)

# Expected output:
# {'Denver': 85', 'Cyrus': 93, 'Ben': 75, 'Alex': 88}

Conclusione

Ordinare un dizionario per valori in Python è un'operazione comune che si può eseguire facilmente con la funzione .sorted(). Che ci servano i dati in ordine crescente o decrescente, conoscere queste tecniche renderà le attività di manipolazione dei dati più semplici ed efficienti. Padroneggiando questi metodi di ordinamento, possiamo assicurarci che i dati siano sempre organizzati al meglio per le nostre esigenze.

FAQs

Q1: Can I sort a dictionary by values if the values are strings instead of numbers?

A1: Sì, possiamo ordinare un dizionario per valori anche se i valori sono stringhe. La funzione .sorted() ordinerà i valori alfabeticamente in ordine crescente o decrescente, proprio come fa con i numeri.

Q2: How can I sort a dictionary by values if it contains nested dictionaries?

A2: Per ordinare un dizionario con dizionari annidati, dobbiamo definire una funzione di ordinamento personalizzata che estragga e confronti i valori annidati rilevanti. Questo richiede una lambda più complessa o una funzione separata per gestire il confronto.

Q3: Can I sort a dictionary by values in-place without creating a new dictionary?

A3: No, i dizionari in Python sono collezioni intrinsecamente non ordinate nelle versioni precedenti alla 3.7, e anche se dalla 3.7 in poi mantengono l'ordine di inserimento, non esiste un metodo integrato per ordinarli in-place. L'ordinamento di un dizionario porta sempre alla creazione di un nuovo dizionario con l'ordine desiderato.

Q4: What is the time complexity of sorting a dictionary by values in Python?

A4: La complessità temporale per ordinare un dizionario per valori usando la funzione .sorted() è O(n log n), dove n è il numero di coppie chiave-valore nel dizionario. Questo perché .sorted() usa internamente Timsort, un algoritmo di ordinamento ibrido con questa complessità.

Q5: Will sorting a dictionary by values change the original dictionary?

A5: No, ordinare un dizionario per valori usando la funzione .sorted() crea un nuovo dizionario. L'originale rimane invariato.

Neetika Khandelwal

Autore

Neetika Khandelwal

Sono uno sviluppatore Java e un affermato autore tecnico specializzato in data science, intelligenza artificiale (AI) e programmazione Java. Con oltre 3 anni di esperienza nello sviluppo software, ho maturato una solida competenza nella creazione di applicazioni robuste e scalabili e nello sfruttare la versatilità di Java per risolvere problemi complessi. Sono appassionato di condivisione della conoscenza con la più ampia comunità tech. Attraverso articoli tecnici completi, tutorial e guide, cerco di rendere più accessibili i temi più complessi di data science e AI, sia ai principianti sia ai professionisti esperti. Attualmente ho pubblicato oltre 125 articoli.

Argomenti

Correlato