[python] Eliminar un elemento de un diccionario



Answers

pop muta el diccionario.

 >>>lol = {"hello":"gdbye"}
 >>>lol.pop("hello")
    'gdbye'
 >>> lol
     {}

Si quiere conservar el original, simplemente puede copiarlo.

Question

¿Hay alguna manera de eliminar un elemento de un diccionario en Python?

Sé que puedo simplemente llamar .pop en el diccionario, pero eso devuelve el elemento que se eliminó. Lo que estoy buscando es que algo devuelva el diccionario menos el elemento en cuestión.

Actualmente tengo una función auxiliar que acepta el diccionario en cuestión como parámetro, y luego devuelve un diccionario con el elemento eliminado. ¿Hay alguna solución más elegante?




A continuación, el fragmento de código te ayudará definitivamente, he agregado comentarios en cada línea que te ayudarán a comprender el código.

def execute():
   dic = {'a':1,'b':2}
   dic2 = remove_key_from_dict(dic, 'b')  
   print(dict2)           # {'a': 1}
   print(dict)            # {'a':1,'b':2}

def remove_key_from_dict(dictionary_to_use, key_to_delete):
   copy_of_dict = dict(dictionary_to_use)     # creating clone/copy of the dictionary
   if key_to_delete in copy_of_dict :         # checking given key is present in the dictionary
       del copy_of_dict [key_to_delete]       # deleting the key from the dictionary 
   return copy_of_dict                        # returning the final dictionary

o también puedes usar dict.pop ()

d = {"a": 1, "b": 2}

res = d.pop("c")  # No `KeyError` here
print (res)       # this line will not execute

o el mejor enfoque es

res = d.pop("c", "key not found")
print (res)   # key not found
print (d)     # {"a": 1, "b": 2}

res = d.pop("b", "key not found")
print (res)   # 2
print (d)     # {"a": 1}



La declaración del del es lo que estás buscando. Si tiene un diccionario llamado foo con una clave llamada 'barra', puede eliminar 'barra' de foo de esta manera:

del foo['bar']

Tenga en cuenta que esto modifica permanentemente el diccionario que se está operando. Si desea conservar el diccionario original, deberá crear una copia de antemano:

>>> foo = {'bar': 'baz'}
>>> fu = dict(foo)
>>> del foo['bar']
>>> print foo
{}
>>> print fu
{'bar': 'baz'}

La llamada dict hace una copia superficial. Si quiere una copia profunda, use copy.deepcopy .

Aquí hay un método que puede copiar y pegar, para su conveniencia:

def minus_key(key, dictionary):
    shallow_copy = dict(dictionary)
    del shallow_copy[key]
    return shallow_copy



nice one-liner para verificar si la clave está presente, eliminarla, devolver el valor o por defecto:

ret_val = ('key' in body and body.pop('key')) or 5



Simplemente llame a del d ['key'].

Sin embargo, en producción, siempre es una buena práctica verificar si 'clave' existe en d.

if 'key' in d:
    del d['key']



No, no hay otra manera que

def dictMinus(dct, val):
   copy = dct.copy()
   del copy[val]
   return copy

Sin embargo, a menudo crear copias de diccionarios ligeramente alterados probablemente no sea una buena idea, ya que resultará en demandas de memoria comparativamente grandes. Por lo general, es mejor registrar el diccionario antiguo (si es necesario) y luego modificarlo.




Related