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


