Invertire un dizionario in Python
-
Usa
items()
per invertire un dizionario in Python -
Usa
collections.defaultdict()
per invertire un dizionario in Python
Questo articolo mostra diversi metodi per invertire un dizionario in Python.
Invertire un dizionario è diverso dal rovesciare una lista, significa invertire o cambiare gli elementi chiave e valore del dizionario, essenzialmente scambiandoli per qualsiasi scopo lo sviluppatore potrebbe usarlo.
Usa items()
per invertire un dizionario in Python
I dizionari Python hanno una funzione incorporata chiamata items()
che restituisce un oggetto iterabile che mostrerà le coppie chiave-valore dei dizionari sotto forma di una tupla.
Ad esempio, dichiara un dizionario di categorie casuali e stampalo usando items()
.
dct = {
"Animal": "Dog",
"Fruit": "Pear",
"Vegetable": "Cabbage",
"Tree": "Maple",
"Flower": "Daisy",
}
print(dct.items())
Produzione:
dict_items([('Animal', 'Dog'), ('Fruit', 'Pear'), ('Vegetable', 'Cabbage'), ('Tree', 'Maple'), ('Flower', 'Daisy')])
Stampare un dizionario usando items()
produrrà una lista iterabile di valori di tupla che possiamo manipolare usando il cicli for
per i dizionari.
Invertire le coppie chiave-valore ripetendo il risultato di items()
e cambiando la chiave e il valore.
dct = {v: k for k, v in dct.items()}
print(dct)
k
e v
nel cicli for
rappresentano rispettivamente la chiave e il valore. v: k
sono i segnaposto per la chiave e il valore in ogni iterazione, sebbene abbiamo impostato il valore precedente v
come nuova chiave e la chiave precedente k
come nuovo valore.
Produzione:
{'Dog': 'Animal', 'Pear': 'Fruit', 'Cabbage': 'Vegetable', 'Maple': 'Tree', 'Daisy': 'Flower'}
Gli elementi chiave e valore sono ora invertiti nell’output.
Chiavi con lo stesso valore in un dizionario invertito
Un altro scenario di esempio quando si inverte un dizionario è se ci sono più chiavi o valori con lo stesso valore. Questo è uno scenario più probabile per invertire un dizionario.
Ad esempio, un dizionario degli animali preferiti delle persone.
favAnimal = {
"John": "Dog",
"Jane": "Cat",
"Jerome": "Lion",
"Jenny": "Dog",
"Jared": "Giraffe",
"James": "Dog",
}
Se il dizionario viene invertito utilizzando il codice sopra, l’output non sarebbe come ci si aspetterebbe.
favAnimal = {v: k for k, v in favAnimal.items()}
print(favAnimal)
Produzione:
{'Dog': 'James', 'Cat': 'Jane', 'Lion': 'Jerome', 'Giraffe': 'Jared'}
Qui mancano 2 elementi dal dizionario originale perché ogni volta che una chiave o un valore si ripete nel bucle, il record esistente verrà sovrascritto.
Il dizionario contiene 3 persone con la coppia di valori Dog
ma è stato copiato solo James
perché questo era l’ultimo record con il valore di Dog
e ha sovrascritto gli altri 2 elementi del dizionario.
Per risolvere questo problema, dovremmo memorizzare i valori in una lista in modo che vengano assegnati a una singola chiave.
Il codice di esempio completo:
favAnimal = {
"John": "Dog",
"Jane": "Cat",
"Jerome": "Lion",
"Jenny": "Dog",
"Jared": "Giraffe",
"James": "Dog",
}
favAnimal = {v: k for k, v in favAnimal.items()}
print(favAnimal)
Usa collections.defaultdict()
per invertire un dizionario in Python
Il modulo collections
ha una funzione defaultdict()
che può manipolare i valori in un dizionario in Python.
defaultdict()
è usato principalmente per creare valori predefiniti di chiavi inesistenti. Se accedi a una chiave inesistente, può dichiarare un valore predefinito per essa, anche se non esiste.
Questa funzione è utile nel nostro caso perché vogliamo istanziare un nuovo dizionario con valori che sono di un tipo di dati di lista.
Utilizzando lo stesso esempio favAnimal
, inverti il dizionario e converti i valori in una lista.
Innanzitutto, inizializza il nuovo dizionario usando defaultdict()
from collections import defaultdict
favAnimal_inverted = defaultdict(list)
Quindi, usa la comprensione dell’lista per l’inversione e memorizza i valori invertiti nel nuovo dizionario.
{favAnimal_inverted[v].append(k) for k, v in favAnimal.items()}
Infine, poiché defaultdict()
crea una sorta di sottoclasse di un dizionario, riconvertilo nel tipo di dizionario di base avvolgendolo in dict()
.
result = dict(favAnimal_inverted)
print(result)
Produzione:
{'Dog': ['John', 'Jenny', 'James'], 'Cat': ['Jane'], 'Lion': ['Jerome'], 'Giraffe': ['Jared']}
John, Jenny e James sono ora nella stessa lista con la chiave Dog
invece degli altri elementi sovrascritti dall’ultimo elemento che aveva Dog
come valore.
Il codice di esempio completo:
from collections import defaultdict
favAnimal_inverted = defaultdict(list)
result = dict(favAnimal_inverted)
print(result)
In sintesi, usa items()
per scorrere il dizionario e invertire chiavi e valori. Se per caso è probabile che il tuo set di dati abbia duplicati, assicurati di convertire i valori in una lista usando defaultdict()
e manipolalo in modo che i valori del dizionario vengano aggiunti all’lista invece di sostituirli i valori esistenti.
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn