python - metodos - Eliminar un elemento del diccionario si la clave existe
lista dentro de un diccionario python (3)
Esta pregunta ya tiene una respuesta aquí:
¿Hay alguna otra forma de eliminar un elemento en un diccionario solo si la clave dada existe, que no sea:
if key in mydict:
del mydict[key]
El escenario es que me dan una colección de claves para eliminar de un diccionario determinado, pero no estoy seguro de si todas ellas existen en el diccionario. En caso de que pierda una solución más eficiente.
Enfoque: calcular claves para eliminar, mutar dict
Llamemos a las keys
la lista / iterador de claves que se le han asignado para eliminar. Yo haría esto:
keys_to_remove = set(keys).intersection(set(mydict.keys()))
for key in keys_to_remove:
del mydict[key]
Calcules por adelantado todos los artículos afectados y los operas.
Enfoque: calcular las claves para mantener, crear nuevas dict con esas claves
Prefiero crear un nuevo diccionario sobre la mutación de uno existente, por lo que probablemente también considere esto:
keys_to_keep = set(mydict.keys()) - set(keys)
new_dict = {k: v for k, v in mydict.iteritems() if k in keys_to_keep}
o:
keys_to_keep = set(mydict.keys()) - set(keys)
new_dict = {k: mydict[k] for k in keys_to_keep}
Puedes usar dict.pop
:
mydict.pop("key", None)
Tenga en cuenta que si el segundo argumento, es decir, None
no se proporciona, KeyError
se KeyError
si la clave no está en el diccionario. Proporcionar el segundo argumento evita la excepción condicional.
También hay:
try:
del mydict[key]
except KeyError:
pass
Esto solo hace 1 búsqueda en lugar de 2. Sin embargo, con la except
cláusulas son caras, entonces si termina presionando la cláusula de excepción con frecuencia, esto probablemente será menos eficiente que lo que ya tiene.