Cómo invertir un diccionario en Python
-
Usar
items()
para invertir un diccionario en Python -
Usa
collections.defaultdict()
para revertir un diccionario en Python
Este artículo muestra diferentes métodos para invertir un diccionario en Python.
Invertir un diccionario es diferente de invertir una lista, significa invertir o cambiar los elementos clave y de valor del diccionario, esencialmente intercambiándolos por cualquier propósito para el que el desarrollador pueda utilizarlo.
Usar items()
para invertir un diccionario en Python
Los diccionarios de Python tienen una función incorporada llamada items()
que devuelve un objeto iterable que mostrará los pares clave-valor de los diccionarios en forma de tupla.
Por ejemplo, declarar un diccionario de categorías aleatorias e imprimirlo usando items()
.
dct = {
"Animal": "Dog",
"Fruit": "Pear",
"Vegetable": "Cabbage",
"Tree": "Maple",
"Flower": "Daisy",
}
print(dct.items())
Resultado:
dict_items([('Animal', 'Dog'), ('Fruit', 'Pear'), ('Vegetable', 'Cabbage'), ('Tree', 'Maple'), ('Flower', 'Daisy')])
Imprimir un diccionario usando items()
producirá una lista iterable de valores de tupla que podemos manipular usando el bucle for
para los diccionarios.
Invierta los pares clave-valor haciendo un bucle con el resultado de items()
y cambiando la clave y el valor.
dct = {v: k for k, v in dct.items()}
print(dct)
La k
y la v
en el bucle for
significan clave y valor respectivamente. v: k
son los marcadores de posición para la clave y el valor en cada iteración, aunque fijamos el valor anterior v
como la nueva clave y la clave anterior k
como el nuevo valor.
Resultado:
{'Dog': 'Animal', 'Pear': 'Fruit', 'Cabbage': 'Vegetable', 'Maple': 'Tree', 'Daisy': 'Flower'}
Los elementos clave y valor están ahora invertidos en la salida.
Las mismas claves de valor en un diccionario invertido
Otro ejemplo de escenario cuando se invierte un diccionario es si hay múltiples claves o valores con el mismo valor. Este es un escenario más probable para invertir un diccionario.
Por ejemplo, un diccionario de los animales favoritos de la gente.
favAnimal = {
"John": "Dog",
"Jane": "Cat",
"Jerome": "Lion",
"Jenny": "Dog",
"Jared": "Giraffe",
"James": "Dog",
}
Si se invierte el diccionario usando el código anterior, la salida no sería la esperada.
favAnimal = {v: k for k, v in favAnimal.items()}
print(favAnimal)
Resultado:
{'Dog': 'James', 'Cat': 'Jane', 'Lion': 'Jerome', 'Giraffe': 'Jared'}
Aquí faltan 2 elementos del diccionario original porque cada vez que una tecla o un valor se repite en el bucle, el registro existente será sobrescrito.
El diccionario contiene 3 personas con el par de valores Dog
pero sólo se copió James
porque éste era el último registro con el valor de Dog
y ha sobrescrito los otros 2 elementos del diccionario.
Para resolver este problema, tendríamos que almacenar los valores en una lista para que se asignaran a una sola clave.
El código de ejemplo 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()
para revertir un diccionario en Python
El módulo collections
tiene una función defaultdict()
que puede manipular los valores de un diccionario en Python.
defaultdict()
se utiliza principalmente para crear valores por defecto de claves inexistentes. Si accedes a una clave inexistente, puede declarar un valor por defecto para ella, incluso si no existe.
Esta función es útil para nuestro caso porque queremos instanciar un nuevo diccionario con valores que son de un tipo de datos de lista.
Usando el mismo ejemplo favAnimal
, invierte el diccionario y convierte los valores a una lista.
Primero, inicializa el nuevo diccionario usando defaultdict()
.
from collections import defaultdict
favAnimal_inverted = defaultdict(list)
A continuación, utilice la comprensión de la lista para la inversión y guarde los valores invertidos en el nuevo diccionario.
{favAnimal_inverted[v].append(k) for k, v in favAnimal.items()}
Por último, ya que defaultdict()
crea una especie de subclase de un diccionario, reconviértalo al tipo de diccionario base envolviéndolo en dict()
.
result = dict(favAnimal_inverted)
print(result)
Resultado:
{'Dog': ['John', 'Jenny', 'James'], 'Cat': ['Jane'], 'Lion': ['Jerome'], 'Giraffe': ['Jared']}
John, Jenny y James ahora están en la misma lista con la clave Dog
en lugar de que los otros elementos sean sobrescritos por el último elemento que tenía Dog
como valor.
El código de ejemplo completo:
from collections import defaultdict
favAnimal_inverted = defaultdict(list)
result = dict(favAnimal_inverted)
print(result)
En resumen, usa items()
demasiado bucle sobre el diccionario e invierte las claves y valores. Si por casualidad tu conjunto de datos tiene duplicados, entonces asegúrate de convertir los valores en una lista usando defaultdict()
y manipúlalo de manera que los valores del diccionario se añadan a la lista en lugar de reemplazar los valores existentes.
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.
LinkedInArtículo relacionado - Python Dictionary
- Cómo comprobar si existe una clave en un diccionario en Python
- Convertir un diccionario en una lista en Python
- Cómo obtener todos los archivos de un directorio
- Cómo encontrar el valor máximo en el Diccionario Python
- Cómo ordenar un diccionario Python por valor
- Cómo fusionar dos diccionarios en Python 2 y 3