Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

336
Vistas
¿Cómo puedo eliminar una clave de un diccionario de Python?

Al eliminar una clave de un diccionario, uso:

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

¿Hay una forma de una línea de hacer esto?

over 4 years ago · Santiago Trujillo
15 Respuestas
Responde la pregunta

0

Puede usar una comprensión de diccionario para crear un nuevo diccionario con esa clave eliminada:

 >>> my_dict = {k: v for k, v in my_dict.items() if k != 'key'}

Puede eliminar por condiciones. No hay error si la key no existe.

over 4 years ago · Santiago Trujillo Denunciar

0

del my_dict[key] es un poco más rápido que my_dict.pop(key) para eliminar una clave de un diccionario cuando la clave existe

 >>> import timeit >>> setup = "d = {i: i for i in range(100000)}" >>> timeit.timeit("del d[3]", setup=setup, number=1) 1.79e-06 >>> timeit.timeit("d.pop(3)", setup=setup, number=1) 2.09e-06 >>> timeit.timeit("d2 = {key: val for key, val in d.items() if key != 3}", setup=setup, number=1) 0.00786

Pero cuando la clave no existe if key in my_dict: del my_dict[key] es ligeramente más rápida que my_dict.pop(key, None) . Ambos son al menos tres veces más rápidos que del en una sentencia try / except :

 >>> timeit.timeit("if 'missing key' in d: del d['missing key']", setup=setup) 0.0229 >>> timeit.timeit("d.pop('missing key', None)", setup=setup) 0.0426 >>> try_except = """ ... try: ... del d['missing key'] ... except KeyError: ... pass ... """ >>> timeit.timeit(try_except, setup=setup) 0.133
over 4 years ago · Santiago Trujillo Denunciar

0

Si necesita eliminar muchas claves de un diccionario en una línea de código, creo que usar map() es bastante sucinto y legible en Pythonic:

 myDict = {'a':1,'b':2,'c':3,'d':4} map(myDict.pop, ['a','c']) # The list of keys to remove >>> myDict {'b': 2, 'd': 4}

Y si necesita detectar errores en los que aparece un valor que no está en el diccionario, use lambda dentro del mapa () de esta manera:

 map(lambda x: myDict.pop(x,None), ['a', 'c', 'e']) [1, 3, None] # pop returns >>> myDict {'b': 2, 'd': 4}

o en python3 , debe usar una lista de comprensión en su lugar:

 [myDict.pop(x, None) for x in ['a', 'c', 'e']]

Funciona. Y 'e' no causó un error, aunque myDict no tenía una tecla 'e'.

over 4 years ago · Santiago Trujillo Denunciar

0

Para eliminar una clave sin importar si está en el diccionario, use la forma de dos argumentos de dict.pop() :

 my_dict.pop('key', None)

Esto devolverá my_dict[key] si la key existe en el diccionario, y None en caso contrario. Si no se especifica el segundo parámetro (es decir my_dict.pop('key') ) y key no existe, se genera un KeyError .

Para eliminar una clave cuya existencia está garantizada, también puede utilizar:

 del my_dict['key']

Esto generará un KeyError si la clave no está en el diccionario.

over 4 years ago · Santiago Trujillo Denunciar

0

Específicamente para responder "¿hay una forma de una línea de hacer esto?"

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

...bueno, tú preguntaste ;-)

Sin embargo, debe considerar que esta forma de eliminar un objeto de un dict no es atómica ; es posible que 'key' esté en my_dict durante la declaración if , pero puede eliminarse antes de que se ejecute del , en cuyo caso del será falla con un KeyError . Dado esto, sería más seguro usar dict.pop o algo similar a

 try: del my_dict['key'] except KeyError: pass

que, por supuesto, definitivamente no es una sola línea.

over 4 years ago · Santiago Trujillo Denunciar

0

Me tomó un tiempo averiguar qué está haciendo exactamente my_dict.pop("key", None) . Así que agregaré esto como respuesta para ahorrar tiempo de búsqueda en Google:

pop(key[, default])

Si la clave está en el diccionario, elimínela y devuelva su valor; de lo contrario, devuelva el valor predeterminado . Si no se proporciona el valor predeterminado y la clave no está en el diccionario, se genera un KeyError .

Documentación

over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar el manejo de excepciones si quiere ser muy detallado:

 try: del dict[key] except KeyError: pass

Sin embargo, esto es más lento que el método pop() , si la clave no existe.

 my_dict.pop('key', None)

No importará para algunas teclas, pero si lo haces repetidamente, entonces el último método es una mejor opción.

El enfoque más rápido es este:

 if 'key' in dict: del myDict['key']

Pero este método es peligroso porque si se elimina la 'key' entre las dos líneas, se generará un KeyError .

over 4 years ago · Santiago Trujillo Denunciar

0

Prefiero la versión inmutable.

 foo = { 1:1, 2:2, 3:3 } removeKeys = [1,2] def woKeys(dct, keyIter): return { k:v for k,v in dct.items() if k not in keyIter } >>> print(woKeys(foo, removeKeys)) {3: 3} >>> print(foo) {1: 1, 2: 2, 3: 3}
over 4 years ago · Santiago Trujillo Denunciar

0

Usando la palabra clave "del":

 del dict[key]
over 4 years ago · Santiago Trujillo Denunciar

0

Podemos eliminar una clave de un diccionario de Python mediante algunos de los siguientes enfoques.

Usando la palabra clave del ; Sin embargo, es casi el mismo enfoque que tú:

 myDict = {'one': 100, 'two': 200, 'three': 300 } print(myDict) # {'one': 100, 'two': 200, 'three': 300} if myDict.get('one') : del myDict['one'] print(myDict) # {'two': 200, 'three': 300}

O

Podemos hacer lo siguiente:

Pero uno debe tener en cuenta que, en este proceso, en realidad no eliminará ninguna clave del diccionario en lugar de excluir una clave específica de ese diccionario. Además, observé que devolvía un diccionario que no estaba ordenado igual que myDict .

 myDict = {'one': 100, 'two': 200, 'three': 300, 'four': 400, 'five': 500} {key:value for key, value in myDict.items() if key != 'one'}

Si lo ejecutamos en el shell, ejecutará algo como {'five': 500, 'four': 400, 'three': 300, 'two': 200} - tenga en cuenta que no es el mismo ordenado que myDict . Nuevamente, si intentamos imprimir myDict , podemos ver todas las claves, incluidas las que excluimos del diccionario con este enfoque. Sin embargo, podemos hacer un nuevo diccionario asignando la siguiente declaración a una variable:

 var = {key:value for key, value in myDict.items() if key != 'one'}

Ahora, si tratamos de imprimirlo, seguirá el orden principal:

 print(var) # {'two': 200, 'three': 300, 'four': 400, 'five': 500}

O

Usando el método pop() .

 myDict = {'one': 100, 'two': 200, 'three': 300} print(myDict) if myDict.get('one') : myDict.pop('one') print(myDict) # {'two': 200, 'three': 300}

La diferencia entre del y pop es que, usando el método pop() , podemos almacenar el valor de la clave si es necesario, como se muestra a continuación:

 myDict = {'one': 100, 'two': 200, 'three': 300} if myDict.get('one') : var = myDict.pop('one') print(myDict) # {'two': 200, 'three': 300} print(var) # 100

Bifurque esta esencia para referencia futura, si lo encuentra útil.

over 4 years ago · Santiago Trujillo Denunciar

0

Filtro único en clave

  • devolver "clave" y eliminarlo de my_dict si existe "clave" en my_dict
  • devolver Ninguno si "clave" no existe en my_dict

esto cambiará my_dict en su lugar (mutable)

 my_dict.pop('key', None)

Múltiples filtros en las claves

generar un nuevo dict (inmutable)

 dic1 = { "x":1, "y": 2, "z": 3 } def func1(item): return item[0]!= "x" and item[0] != "y" print( dict( filter( lambda item: item[0] != "x" and item[0] != "y", dic1.items() ) ) )
over 4 years ago · Santiago Trujillo Denunciar

0

El tipo de datos del diccionario tiene un método llamado dict_name.pop(item) y se puede usar para eliminar un par clave:valor de un diccionario.

 a={9:4,2:3,4:2,1:3} a.pop(9) print(a)

Esto dará la salida como:

 {2: 3, 4: 2, 1: 3}

De esta manera, puede eliminar un elemento de un diccionario en una línea.

over 4 years ago · Santiago Trujillo Denunciar

0

Otra forma es usando items() + dict comprension.

items() junto con la comprensión de dictados también pueden ayudarnos a lograr la tarea de eliminar el par clave-valor, pero tiene el inconveniente de no ser una técnica de dictado en su lugar. En realidad, se crea un nuevo dictado excepto por la clave que no deseamos incluir.

 test_dict = {"sai" : 22, "kiran" : 21, "vinod" : 21, "sangam" : 21} # Printing dictionary before removal print ("dictionary before performing remove is : " + str(test_dict)) # Using items() + dict comprehension to remove a dict. pair # removes vinod new_dict = {key:val for key, val in test_dict.items() if key != 'vinod'} # Printing dictionary after removal print ("dictionary after remove is : " + str(new_dict))

Producción:

 dictionary before performing remove is : {'sai': 22, 'kiran': 21, 'vinod': 21, 'sangam': 21} dictionary after remove is : {'sai': 22, 'kiran': 21, 'sangam': 21}
over 4 years ago · Santiago Trujillo Denunciar

0

También podría usar el filter con lambda :

 >>> d = {'a': 1, 'b': 2, 'c': 3} >>> dict(filter(lambda x: x[0] != 'a', d.items())) {'b': 2, 'c': 3} >>>
over 4 years ago · Santiago Trujillo Denunciar

0

Prueba esto

 if key in data: del data[key]
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda