Diccionarios de Python: Cómo Cambiar Claves y Valores
Aprende a cambiar valores, renombrar claves y actualizar elementos en masa en Python usando asignación, pop() y update() con ejemplos claros.
Los diccionarios de Python permiten almacenar datos como pares clave-valor y actualizarlos libremente después de su creación. Este capítulo cubre todas las formas prácticas de modificar elementos existentes en un diccionario: cambiar un único valor, renombrar una clave, actualizar en masa con update() y manejar diccionarios anidados — incluyendo los casos límite que encontrarás en código real.
Para conocer cómo funcionan los diccionarios, consulta el capítulo Acceder a Elementos del Diccionario. Para agregar entradas nuevas, consulta Agregar Elementos al Diccionario. Para eliminar entradas, consulta Eliminar Elementos del Diccionario.
Cambiar un Valor
La modificación más sencilla es reasignar el valor almacenado bajo una clave existente. Usa la clave como índice en el lado izquierdo de una asignación:
Si la clave ya existe, el valor se sobreescribe en su lugar. Las demás entradas no se ven afectadas y el diccionario preserva su orden de inserción (Python 3.7+).
¿Qué sucede cuando la clave no existe?
Si usas una asignación con una clave que no está en el diccionario, Python silenciosamente crea una nueva entrada en lugar de lanzar un error:
prices = {'apple': 1.00, 'banana': 0.50}
prices['mango'] = 2.50 # 'mango' did not exist — a new entry is created
print(prices)
# {'apple': 1.00, 'banana': 0.50, 'mango': 2.50}Cuando solo quieres actualizar si la clave existe, verifica primero con in:
if 'banana' in prices:
prices['banana'] = 0.75Actualización en Masa con update()
dict.update() permite cambiar varios valores a la vez. Pásale un diccionario (o argumentos de palabra clave) de pares clave-valor a aplicar:
inventory = {'apple': 10, 'banana': 5, 'orange': 8}
inventory.update({'banana': 12, 'orange': 3})
print(inventory)
# {'apple': 10, 'banana': 12, 'orange': 3}Las claves presentes en el argumento sobreescriben los valores existentes; las claves no mencionadas permanecen sin cambios. También puedes pasar argumentos de palabra clave directamente:
inventory.update(apple=20, banana=15)
print(inventory)
# {'apple': 20, 'banana': 15, 'orange': 3}update() también agrega las claves del argumento que aún no existen en el diccionario destino, lo que lo hace útil para combinar dos diccionarios.
Renombrar (Cambiar) una Clave
Las claves de un diccionario son referencias inmutables — no puedes renombrar una clave directamente. El patrón estándar es agregar una nueva clave con el valor antiguo y eliminar la clave anterior. El método pop() hace ambas cosas en una sola expresión:
pop('banana') devuelve 2 y elimina la entrada 'banana'. Asignar ese valor de retorno a my_dict['pear'] crea la entrada renombrada.
Ten en cuenta que la clave renombrada aparece al final del diccionario, no en la posición original de 'banana', porque es una nueva clave que se inserta.
Renombrar una clave cuando no estás seguro de que existe
Si la clave puede estar ausente, pop() lanza un KeyError. Pasa un valor por defecto como segundo argumento para evitar la excepción:
value = my_dict.pop('grape', None) # returns None if 'grape' is missing
if value is not None:
my_dict['kiwi'] = valueCambiar Tanto la Clave Como el Valor
Combina el patrón de renombrado con una reasignación de valor para cambiar ambos a la vez:
O condénsalo en un solo paso asignando directamente el valor deseado en lugar del valor extraído con pop:
my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
my_dict.pop('banana') # remove old key (discard value)
my_dict['pear'] = 4 # insert new key with new value
print(my_dict)
# {'apple': 1, 'orange': 3, 'pear': 4}Actualizar Elementos en un Diccionario Anidado
Cuando un diccionario contiene otros diccionarios como valores, usa indexación encadenada para alcanzar el valor interno:
catalog = {
'apple': {'price': 1.00, 'stock': 50},
'banana': {'price': 0.50, 'stock': 30},
}
# Update only the price of 'banana'
catalog['banana']['price'] = 0.75
print(catalog['banana'])
# {'price': 0.75, 'stock': 30}También puedes llamar a update() en el diccionario interno:
catalog['apple'].update({'price': 1.20, 'stock': 45})
print(catalog['apple'])
# {'price': 1.20, 'stock': 45}Errores Comunes
| Situación | Qué sucede | Solución |
|---|---|---|
| Asignar a una clave inexistente | Crea una nueva entrada (sin error) | Verifica con if key in d primero cuando solo quieres actualizar |
Llamar a pop() en una clave inexistente | Lanza KeyError | Usa d.pop(key, default) |
| El renombrado no conserva la posición original | La nueva clave va al final | Si el orden importa, reconstruye con una comprensión de diccionario |
update() con claves superpuestas | Sobreescribe silenciosamente | Intencional — ese es el propósito de update() |
Reconstruir para conservar el orden de las claves
Si necesitas que la clave renombrada permanezca en su posición original, reconstruye el diccionario con una comprensión:
my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
my_dict = {
('pear' if k == 'banana' else k): v
for k, v in my_dict.items()
}
print(my_dict)
# {'apple': 1, 'pear': 2, 'orange': 3}Esto itera sobre cada entrada existente y emite la clave renombrada solo donde la condición es verdadera, dejando todo lo demás sin cambios.