Come ordinare un dizionario Python per chiave o valore

In questo tutorial imparerai come ordinare un dizionario Python in base alla sua chiave o valore.

Quando si lavora con un dizionario in Python, a volte è necessario ordinarne il contenuto, per chiave o per valore. Poiché un dizionario Python è una mappatura chiave-valore, creerai un nuovo dizionario con le chiavi o i valori ordinati secondo necessità.

In questo tutorial, inizieremo esaminando le basi del dizionario Python. Impareremo quindi a creare un nuovo dizionario in cui i contenuti sono ordinati per chiave o per valore, a seconda delle esigenze.

Nozioni di base sul dizionario Python, rivisitato

Che cos’è un dizionario Python?

Dictionary è una struttura di dati incorporata in Python. Memorizza gli elementi come coppie chiave-valore. È possibile utilizzare i tasti per cercare i valori corrispondenti. Poiché le chiavi identificano in modo univoco i valori, non dovrebbero esserci ripetizioni di chiavi.

py_dict = {"Python":"cool!","Learn":True}
py_dict["Python"]
# Output: cool!

py_dict["Learn"]
# Output: True

Funzionalmente, un dizionario è simile a una mappa hash. Pertanto, non è necessariamente una struttura dati ordinata. Puoi accedere ai contenuti di un dizionario in qualsiasi ordine arbitrario, purché tu conosca le chiavi.

Ordinamento di elementi in un dizionario

Nelle versioni precedenti di Python, dovevi usare un file OrdinatoDict per preservare l’ordine delle chiavi. Tuttavia, da Python 3.7, puoi accedere agli elementi nello stesso ordine in cui li aggiungi al dizionario.

Ora che hai appreso le basi dei dizionari Python, impariamo come creare copie ordinate del dizionario.

⚙️ Nota: è necessario disporre di Python 3.7 o successivo affinché il codice in questo tutorial funzioni come previsto. Puoi scaricare il ultima versione di Pythonoppure esegui gli esempi in winadmin.it Online Python Editor.

Come ordinare un dizionario Python per chiave

Guarda l’immagine seguente del menu dei dessert in un bar. Sono presenti due colonne corrispondenti alle voci del menu e ai rispettivi prezzi.

Puoi rappresentarlo sotto forma di un dizionario Python raccogliendo i nomi degli elementi come chiavi e i loro prezzi come valori.

Andiamo avanti e creiamo i dolci del dizionario, come mostrato di seguito.

desserts = {
    "Ice cream":10,
    "Brownies":12,
    "Cheesecake":3,
    "Swiss roll":5,
    "Cookies":4,
    "Cup cake":2
}

Successivamente, creiamo un dizionario sorted_desserts, in cui i dessert sono disposti in ordine alfabetico. Nel dizionario dei dolci originale, i nomi dei dolci sono le chiavi. Quindi dovresti ordinare queste chiavi in ​​ordine alfabetico per creare un nuovo dizionario.

Come accedere alle chiavi di un dizionario Python

Per fare ciò, otterremo prima le chiavi del dizionario e poi le ordineremo in ordine alfabetico.

In Python, puoi usare il metodo del dizionario integrato .keys() per ottenere un elenco di tutte le chiavi nel dizionario.

Chiamiamo il metodo .keys() sul dizionario dei dessert per recuperare le chiavi, come mostrato di seguito.

keys = desserts.keys()
print(keys)

#Output
['Ice cream', 'Brownies', 'Cheesecake', 'Swiss roll', 'Cookies', 
'Cup cake']

Chiamare la funzione built-in sorted() di Python con un elenco come argomento restituisce un nuovo elenco ordinato.

Quindi, chiamiamo la funzione sorted() con le chiavi dell’elenco come argomento e memorizziamo l’elenco ordinato nella variabile chiavi_ordinate.

sorted_keys = sorted(keys)
print(sorted_keys)

# Output
['Brownies', 'Cheesecake', 'Cookies', 'Cup cake', 'Ice cream', 'Swiss roll']

Ora che abbiamo le chiavi ordinate in ordine alfabetico, possiamo cercare i valori corrispondenti alle chiavi in ​​sorted_keys dal dizionario dei dessert, come mostrato di seguito.

sorted_desserts = {}
for key in sorted_keys:
  sorted_desserts[key] = desserts[key]

print(sorted_desserts)

# Output
{'Brownies': 12, 'Cheesecake': 3, 'Cookies': 4, 'Cup cake': 2, 
'Ice cream': 10, 'Swiss roll': 5}

Espandiamo il blocco di codice sopra:

  • Inizializza sorted_desserts in modo che sia un dizionario Python vuoto.
  • Scorri l’elenco delle chiavi chiavi_ordinate.
  • Per ogni chiave in sorted_keys, aggiungi una voce a sorted_desserts cercando il valore corrispondente nel dizionario dei dessert.

L’uso del ciclo for in questo modo è considerato dettagliato. In Python, c’è un’alternativa più concisa usando la comprensione del dizionario.

Comprensione del dizionario in Python

Python supporta l’uso della comprensione del dizionario, simile alla comprensione degli elenchi. La comprensione del dizionario ti consente di creare un nuovo dizionario Python con una sola riga di codice.

▶️ Ecco il costrutto generale per utilizzare la comprensione del dizionario in Python.

# 1. when you have both keys and values in two lists: list1, list2
new_dict = {key:value for key,value in zip(list1,list2)}

# 2. when you have the keys, and can look up the values
new_dict = {key:value for key in <iterable>}

Usiamo il secondo costrutto nella cella sopra: new_dict = {key:value for key in } per creare un dizionario sorted_desserts.

In questo esempio:

  • iterabile: l’elenco chiavi_ordinate
  • chiave: la chiave a cui accediamo scorrendo ordinati_chiavi
  • valore: cerca nel dizionario dei dolci il valore corrispondente alla chiave, dolci[key]

Mettendo tutto insieme, abbiamo l’espressione per la comprensione del dizionario, come mostrato di seguito.

sorted_desserts = {key:desserts[key] for key in sorted_keys}
print(sorted_desserts)

{'Brownies': 12, 'Cheesecake': 3, 'Cookies': 4, 'Cup cake': 2, 
'Ice cream': 10, 'Swiss roll': 5}

Dall’output di cui sopra, i dessert sono disposti in ordine alfabetico nel dizionario sorted_desserts.

Come ordinare un dizionario Python per valore

Successivamente, impareremo come ordinare un dizionario Python in base ai suoi valori.

Nel dizionario dei dolci, i valori corrispondono ai prezzi dei dolci. Potresti voler ordinare il dizionario in base ai prezzi, in ordine crescente o decrescente.

▶️ Puoi utilizzare il metodo del dizionario integrato .items() per ottenere tutte le coppie chiave-valore. Ogni tupla è una coppia chiave-valore.

desserts.items()

dict_items([('Ice cream', 10), ('Brownies', 12), ('Cheesecake', 3), 
('Swiss roll', 5), ('Cookies', 4), ('Cup cake', 2)])

Ciascuno degli elementi è una tupla in sé. Quindi puoi anche indicizzare ogni coppia chiave-valore per accedere alle chiavi e ai valori individualmente.

dict_items = desserts.items()
for item in dict_items:
  print(f"key:{item[0]},value:{item[1]}")

# Output
key:Ice cream,value:10
key:Brownies,value:12
key:Cheesecake,value:3
key:Swiss roll,value:5
key:Cookies,value:4
key:Cup cake,value:2

Poiché vorremmo ordinare per valori, useremo il metodo sopra per ottenere il valore all’indice 1 nella coppia chiave-valore.

Come ordinare i valori di un dizionario Python in ordine crescente

Questa volta useremo la funzione sorted() insieme al parametro chiave opzionale. chiave può essere qualsiasi funzione Python, una funzione incorporata, una funzione definita dall’utente o anche a funzione lambda.

Nota: lambda args: expression è la sintassi per definire le funzioni lambda in Python.

In questo esempio di ordinamento dei dessert in base al prezzo, abbiamo accesso agli elementi del dizionario (coppie chiave-valore). Imposteremo key = lambda item:item[1] come vorremmo ordinare in base al valore (prezzo).

Poiché la funzione sorted() restituisce un elenco per impostazione predefinita, dovresti eseguirne il cast in modo esplicito in un dict, come mostrato di seguito.

sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1]))
print(sorted_desserts)

{'Cup cake': 2, 'Cheesecake': 3, 'Cookies': 4, 'Swiss roll': 5, 
'Ice cream': 10, 'Brownies': 12}

Puoi anche riscrivere usando comprensione del dizionariocome discusso prima.

sorted_desserts = {key:value for key, value in sorted(desserts.items(), 
key=lambda item:item[1])}

print(sorted_desserts)

# Output
{'Cup cake': 2, 'Cheesecake': 3, 'Cookies': 4, 'Swiss roll': 5, 
'Ice cream': 10, 'Brownies': 12}

In sorted_desserts, Cup Cake al prezzo di $ 2 è il primo articolo e Brownies al prezzo di $ 12 è l’ultimo.

Come ordinare i valori di un dizionario Python in ordine decrescente

Se desideri ordinare i prezzi in ordine decrescente, puoi impostare il parametro inverso opzionale su True, come spiegato di seguito.

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

# Output
{'Brownies': 12, 'Ice cream': 10, 'Swiss roll': 5, 'Cookies': 4, 
'Cheesecake': 3, 'Cup cake': 2}

Ora, sorted_desserts è stato ordinato in base all’ordine decrescente dei prezzi, a partire dai Brownies da dessert più costosi che costano $ 12.

Conclusione 👩🏽‍💻

Riassumiamo rapidamente tutto ciò che abbiamo imparato in questo tutorial.

  • Un dizionario Python memorizza i dati in coppie chiave-valore; le chiavi dovrebbero essere tutte univoche.
  • Nel processo di ordinamento di un dizionario per chiave o valore, creiamo un nuovo dizionario che viene ordinato secondo necessità.
  • È possibile utilizzare i metodi del dizionario integrati, .keys() e .items() per recuperare rispettivamente tutte le chiavi e le coppie chiave-valore.
  • È possibile utilizzare la funzione sorted() insieme alla chiave dei parametri facoltativi e invertire per ottenere l’ordinamento desiderato.

Ora che hai imparato a ordinare un dizionario Python, impara a ordinare gli elenchi Python. Buona codifica!🎉