Diccionarios de Python

En Python, un diccionario es una colección ordenada (a partir de Python > 3.7) de pares de clave: valor.

De la documentación de Python 3

Las operaciones principales en un diccionario son almacenar un valor con alguna clave y extraer el valor dada la clave. También es posible eliminar un par clave:valor con del.

Ejemplo de Diccionario:

# Diccionario: colección de pares clave-valor
mi_gato = {
    'size': 'fat',          # clave: 'size', valor: 'fat'
    'color': 'gray',         # clave: 'color', valor: 'gray'
    'disposition': 'loud'    # clave: 'disposition', valor: 'loud'
}

Establecer clave, valor usando el operador de subíndice []

# Añadir o actualizar entrada de diccionario usando el operador de subíndice
mi_gato = {
 'size': 'fat',
 'color': 'gray',
 'disposition': 'loud',
}
mi_gato['age_years'] = 2  # Añadir nuevo par clave-valor
print(mi_gato)
{'size': 'fat', 'color': 'gray', 'disposition': 'loud', 'age_years': 2}

Obtener valor usando el operador de subíndice []

En caso de que la clave no esté presente en el diccionario, se genera un KeyError.

mi_gato = {
 'size': 'fat',
 'color': 'gray',
 'disposition': 'loud',
}
print(mi_gato['size'])
fat
print(mi_gato['eye_color'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'eye_color'

values()

El método values() obtiene los valores del diccionario:

# Iterar sobre los valores del diccionario usando el método .values()
mascota = {'color': 'red', 'age': 42}
for value in mascota.values():  # Bucle a través de todos los valores
    print(value)
red
42

keys()

El método keys() obtiene las claves del diccionario:

# Iterar sobre las claves del diccionario usando el método .keys()
mascota = {'color': 'red', 'age': 42}
for key in mascota.keys():  # Bucle a través de todas las claves
    print(key)
color
age

No hay necesidad de usar .keys() ya que por defecto se iterará sobre las claves:

# Iterar sobre el diccionario directamente itera sobre las claves (comportamiento por defecto)
mascota = {'color': 'red', 'age': 42}
for key in mascota:  # Equivalente a for key in mascota.keys()
    print(key)
color
age

items()

El método items() obtiene los elementos de un diccionario y los devuelve como una Tupla:

mascota = {'color': 'red', 'age': 42}
for item in mascota.items():
    print(item)
('color', 'red')
('age', 42)

Usando los métodos keys(), values() e items(), un bucle for puede iterar sobre las claves, los valores o los pares clave-valor en un diccionario, respectivamente.

# Iterar sobre pares clave-valor usando el método .items()
mascota = {'color': 'red', 'age': 42}
for key, value in mascota.items():  # Desempaquetar tupla en clave y valor
    print(f'Key: {key} Value: {value}')
Key: color Value: red
Key: age Value: 42

get()

El método get() devuelve el valor de un elemento con la clave dada. Si la clave no existe, devuelve None:

# Método .get(): recuperar valor de forma segura, devuelve None si la clave no existe
esposa = {'name': 'Rose', 'age': 33}

f'My wife name is {esposa.get("name")}'  # Devuelve 'Rose'
'My wife name is Rose'
f'She is {esposa.get("age")} years old.'
'She is 33 years old.'
f'She is deeply in love with {esposa.get("husband")}'
'She is deeply in love with None'

También puedes cambiar el valor predeterminado None por uno de tu elección:

esposa = {'name': 'Rose', 'age': 33}

f'She is deeply in love with {esposa.get("husband", "lover")}'
'She is deeply in love with lover'

Añadir elementos con setdefault()

Es posible añadir un elemento a un diccionario de esta manera:

esposa = {'name': 'Rose', 'age': 33}
if 'has_hair' not in esposa:
    esposa['has_hair'] = True

Usando el método setdefault, podemos hacer el mismo código más corto:

esposa = {'name': 'Rose', 'age': 33}
esposa.setdefault('has_hair', True)
esposa
{'name': 'Rose', 'age': 33, 'has_hair': True}

Eliminar Elementos

pop()

El método pop() elimina y devuelve un elemento basado en una clave dada.

esposa = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
esposa.pop('age')
33
esposa
{'name': 'Rose', 'hair': 'brown'}
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

¿Qué hace pop() cuando se llama en un diccionario?
A. Solo elimina el par clave-valor
B. Elimina y devuelve el valor para la clave especificada
C. Solo devuelve el valor sin eliminarlo
D. Elimina todos los elementos del diccionario

popitem()

El método popitem() elimina el último elemento en un diccionario y lo devuelve.

esposa = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
esposa.popitem()
('hair', 'brown')
esposa
{'name': 'Rose', 'age': 33}

del

El método del elimina un elemento basado en una clave dada.

esposa = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
del esposa['age']
esposa
{'name': 'Rose', 'hair': 'brown'}

clear()

El método clear() elimina todos los elementos de un diccionario.

esposa = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
esposa.clear()
esposa
{}

Comprobar claves en un Diccionario

persona = {'name': 'Rose', 'age': 33}

'name' in persona.keys()
True
'height' in persona.keys()
False
'skin' in persona # Puedes omitir keys()
False

Comprobar valores en un Diccionario

persona = {'name': 'Rose', 'age': 33}

'Rose' in persona.values()
True
33 in persona.values()
True

Impresión Bonita (Pretty Printing)

import pprint

esposa = {'name': 'Rose', 'age': 33, 'has_hair': True, 'hair_color': 'brown', 'height': 1.6, 'eye_color': 'brown'}
pprint.pprint(esposa)
{'age': 33,
 'eye_color': 'brown',
 'hair_color': 'brown',
 'has_hair': True,
 'height': 1.6,
 'name': 'Rose'}

Fusionar dos diccionarios

Para Python 3.5+:

dict_a = {'a': 1, 'b': 2}
dict_b = {'b': 3, 'c': 4}
dict_c = {**dict_b, **dict_a}
dict_c
{'a': 1, 'b': 3, 'c': 4}
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

Al fusionar dos diccionarios usando {**dict_b, **dict_a}, ¿qué sucede si ambos diccionarios tienen la misma clave?
A. El valor de dict_b sobrescribe el valor de dict_a
B. El valor de dict_a sobrescribe el valor de dict_b
C. Ambos valores se mantienen en una lista
D. Se genera un error

Enlaces relevantes