Python | Eliminar elementos del diccionario durante la iteración

Un diccionario en Python es una colección ordenada de valores de datos. A diferencia de otros tipos de datos que contienen solo un valor único como elemento, un diccionario contiene la clave: pares de valores. Las claves del diccionario deben ser únicas y deben ser de un tipo de datos inmutable como: string, entero o tupla.

Nota: En Python 2, las claves del diccionario no estaban ordenadas. A partir de Python 3, están ordenados.

Veamos cómo eliminar elementos de un diccionario mientras se itera sobre él. 

Método 1: Usar el método del()

Python3

# Creating a dictionary
myDict = {1: 'Geeks', 2: 'For', 3: 'Geeks'}
 
# Iterating through the keys
for key in myDict.keys():
    if key == 2:
        del myDict[key]
 
# Modified Dictionary
print(myDict)

Producción:

{1: 'Geeks', 3: 'Geeks'}

El código anterior funciona bien para Python2 (ya que en esa versión las claves del diccionario no estaban ordenadas). Pero si lo ejecutamos con Python3, arroja el siguiente error:  

for key in myDict.keys():
RuntimeError: dictionary changed size during iteration

Este error de tiempo de ejecución dice que no se permite cambiar el tamaño del diccionario durante la iteración (pero es posible). Ahora, veamos todas las diferentes formas en que podemos eliminar elementos del diccionario mientras iteramos. 

Método 2: crear una lista de claves para eliminar

Aquí usamos una lista de comprensión para crear una lista de todas las claves que deben eliminarse y luego iteramos a través de cada clave en esa lista eliminándolas:

Python3

# Creating a dictionary
myDict = {1: 'Geeks', 2: 'For', 3: 'Geeks'}
 
# Using a list comprehension to make a list of the keys to be deleted
# (keys having value in 3.)
delete = [key for key in myDict if key == 3]
 
# delete the key/s
for key in delete:
    del myDict[key]
 
# Modified Dictionary
print(myDict)

Producción: 

{1: 'Geeks', 2: 'For'}

O si eres nuevo en la lista de comprensiones:

Podemos construir la lista de claves para eliminar usando un bucle for para eso, cree una lista, elimine y agregue claves de todos los valores que queremos eliminar. 

Python

# Creating a dictionary
myDict = {1: 'Geeks', 2: 'For', 3: 'Geeks'}
 
# create a list of keys to delete
delete = []
for key in myDict:
    if key == 3:
        delete.append(key)
 
for i in delete:
    del myDict[i]
 
# Modified Dictionary
print(myDict)

Método 3: Usar la lista (myDict) 

Python3

# Creating a dictionary
myDict = {1: 'Geeks', 2: 'For', 3: 'Geeks'}
 
# Iterating through the list of keys
for key in list(myDict):
    if key == 2:
        del myDict[key]
 
# Modified Dictionary
print(myDict)

Producción: 

{1: 'Geeks', 3: 'Geeks'}

Publicación traducida automáticamente

Artículo escrito por Shivam_k y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *