Invertire un dizionario in Python

Rayven Esplanada 30 gennaio 2023
  1. Usa items() per invertire un dizionario in Python
  2. Usa collections.defaultdict() per invertire un dizionario in Python
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.

Rayven Esplanada avatar Rayven Esplanada avatar

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

Articolo correlato - Python Dictionary