W3docs

Eliminar elementos

Aprende a eliminar elementos de un diccionario Python: pop(), popitem(), del, clear() y comprensiones de diccionario, con ejemplos y advertencias.

Los diccionarios de Python son almacenes de clave-valor mutables, lo que significa que puedes añadir, cambiar y eliminar entradas en cualquier momento. Este capítulo cubre todas las técnicas estándar para eliminar elementos de un diccionario — pop(), popitem(), la sentencia del, clear() y las comprensiones de diccionario — con notas prácticas sobre cuándo conviene usar cada enfoque y cómo evitar errores comunes.

Comparación rápida

TécnicaEliminaDevuelveLanza error si falta la clave
dict.pop(key)Un par clave-valorEl valor eliminadoKeyError (a menos que se dé un valor por defecto)
dict.pop(key, default)Un par clave-valorEl valor eliminado o el valor por defectoNunca
dict.popitem()El último par insertadoTupla (key, value)KeyError si el diccionario está vacío
del dict[key]Un par clave-valorNadaKeyError
dict.clear()Todos los paresNadaNunca
Comprensión de diccionarioPares seleccionadosNuevo diccionarioNunca

Eliminar un elemento con pop()

dict.pop(key) elimina el par clave-valor de la clave indicada y devuelve el valor que estaba almacenado. Esto lo hace útil cuando necesitas el valor para procesarlo después de eliminarlo.

Eliminar una clave y capturar su valor

python— editable, runs on the server

Si la clave no existe, pop() lanza un KeyError:

inventory = {'apples': 10}
inventory.pop('oranges')  # KeyError: 'oranges'

Usar un valor por defecto para evitar KeyError

Pasa un segundo argumento a pop() como valor de reserva. Cuando la clave está ausente, pop() devuelve el valor por defecto en lugar de lanzar un error — el diccionario queda sin cambios.

Eliminación segura con un valor por defecto

inventory = {'apples': 10, 'cherries': 20}
removed = inventory.pop('oranges', 0)
print(removed)    # 0
print(inventory)  # {'apples': 10, 'cherries': 20}

Este patrón es una alternativa más limpia que comprobar if key in dict antes de llamar a pop().

Eliminar el último elemento insertado con popitem()

dict.popitem() elimina y devuelve el último par insertado como una tupla (key, value). Era la herramienta principal para iterar y consumir un diccionario antes de que Python 3.7 garantizara el orden de inserción.

Extraer el último elemento insertado

scores = {'alice': 95, 'bob': 82, 'carol': 78}
last_item = scores.popitem()
print(last_item)  # ('carol', 78)
print(scores)     # {'alice': 95, 'bob': 82}

popitem() lanza un KeyError si el diccionario está vacío. Úsalo cuando quieras procesar y consumir todos los elementos uno a uno (como una pila), o cuando solo necesites eliminar la entrada añadida más recientemente.

Eliminar un elemento con del

La sentencia del elimina un par clave-valor por su clave sin devolver ningún valor. Úsala cuando solo necesites borrar la entrada y no te interese el valor eliminado.

Eliminar una clave con del

python— editable, runs on the server

Al igual que pop() sin valor por defecto, del lanza un KeyError si la clave no existe:

del user['phone']  # KeyError: 'phone'

del vs pop() — ¿cuál usar?

  • Usa del cuando quieras descartar el elemento y nunca necesites su valor.
  • Usa pop() cuando necesites el valor eliminado, o quieras una operación segura sin efectos cuando la clave pueda estar ausente.

Eliminar todos los elementos con clear()

dict.clear() vacía el diccionario en su lugar, dejando un {} vacío. El objeto diccionario en sí sigue existiendo, por lo que cualquier otra variable que referencie el mismo dict también verá un diccionario vacío.

Borrar todas las entradas

config = {'host': 'localhost', 'port': 5432, 'debug': True}
config.clear()
print(config)  # {}

Compara esto con reasignar config = {}: la reasignación crea un nuevo objeto diccionario y deja cualquier otra referencia apuntando al antiguo (que aún contiene datos). clear() modifica el mismo objeto.

config = {'host': 'localhost', 'port': 5432}
alias = config          # alias and config point to the same dict

config = {}             # only config is updated; alias still has data
print(alias)            # {'host': 'localhost', 'port': 5432}

config = {'host': 'localhost', 'port': 5432}
alias = config
config.clear()          # modifies the shared object
print(alias)            # {}

Eliminar varias claves específicas

Python no tiene un método integrado para eliminar varias claves a la vez, pero hay dos enfoques idiomáticos.

Bucle con pop()

settings = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
to_remove = ['b', 'd']

for key in to_remove:
    settings.pop(key, None)  # None default = safe even if key is absent

print(settings)  # {'a': 1, 'c': 3}

Comprensión de diccionario

Una comprensión de diccionario construye un nuevo diccionario que excluye las claves no deseadas. Es preferible cuando quieres mantener el original intacto.

Filtrar un diccionario mediante comprensión

python— editable, runs on the server

También puedes filtrar por valor en lugar de por clave:

scores = {'alice': 95, 'bob': 40, 'carol': 78, 'dan': 35}
passing = {name: score for name, score in scores.items() if score >= 50}
print(passing)  # {'alice': 95, 'carol': 78}

Eliminar elementos durante la iteración — el error más común

Modificar un diccionario durante la iteración lanza un RuntimeError en Python 3:

data = {'a': 1, 'b': 2, 'c': 3}

# This raises RuntimeError: dictionary changed size during iteration
for key in data:
    if data[key] < 2:
        del data[key]

El patrón seguro es iterar sobre una copia de las claves:

data = {'a': 1, 'b': 2, 'c': 3}

for key in list(data):           # list() snapshots the keys
    if data[key] < 2:
        del data[key]

print(data)  # {'b': 2, 'c': 3}

Alternativamente, construye un nuevo diccionario con una comprensión (mostrado arriba en la sección de comprensiones) — este suele ser el enfoque más limpio.

Para más información sobre cómo iterar diccionarios de forma segura, consulta Loop Dictionaries.

Elegir el método adecuado

  • ¿Necesitas el valor eliminado? Usa pop(key).
  • ¿La clave podría no existir? Usa pop(key, default) para evitar un KeyError.
  • ¿Solo quieres eliminar, sin necesitar el valor? Usa del dict[key].
  • ¿Eliminar la última entrada insertada? Usa popitem().
  • ¿Borrar todo? Usa clear().
  • ¿Eliminar según una condición o varias claves? Usa una comprensión de diccionario o un bucle for key in list(dict).

Práctica

Práctica
Which method removes a key from a Python dictionary and returns its value?
Which method removes a key from a Python dictionary and returns its value?
Was this page helpful?