Comprobar si una clave determinada ya existe en un diccionario

Resuelto Mohan Gulati asked hace 15 años • 16 respuestas

Quería probar si existe una clave en un diccionario antes de actualizar el valor de la clave. Escribí el siguiente código:

if 'key1' in dict.keys():
  print "blah"
else:
  print "boo"

Creo que esta no es la mejor manera de realizar esta tarea. ¿Existe una mejor manera de probar una clave en el diccionario?

Mohan Gulati avatar Oct 22 '09 02:10 Mohan Gulati
Aceptado

inpruebas para la existencia de una clave en a dict:

d = {"key1": 10, "key2": 23}

if "key1" in d:
    print("this will execute")

if "nonexistent key" in d:
    print("this will not")

Úselo dict.get()para proporcionar un valor predeterminado cuando la clave no existe:

d = {}

for i in range(100):
    key = i % 10
    d[key] = d.get(key, 0) + 1

Para proporcionar un valor predeterminado para cada clave, utilice dict.setdefault()en cada asignación:

d = {}

for i in range(100):
    d[i % 10] = d.setdefault(i % 10, 0) + 1    

...o mejor, usa defaultdictdesde el collectionsmódulo:

from collections import defaultdict

d = defaultdict(int)

for i in range(100):
    d[i % 10] += 1
Chris B. avatar Oct 21 '2009 19:10 Chris B.

Úselo key in my_dictdirectamente en lugar de key in my_dict.keys():

if 'key1' in my_dict:
    print("blah")
else:
    print("boo")

Eso será mucho más rápido ya que utiliza el hash O(1) del diccionario en lugar de realizar una búsqueda lineal O(n) en una lista de claves.

Jason Baker avatar Oct 21 '2009 19:10 Jason Baker

Puedes probar la presencia de una clave en un diccionario, usando la palabra clave in :

d = {'a': 1, 'b': 2}
'a' in d # <== evaluates to True
'c' in d # <== evaluates to False

Un uso común para comprobar la existencia de una clave en un diccionario antes de mutarla es inicializar el valor de forma predeterminada (por ejemplo, si sus valores son listas y desea asegurarse de que haya una lista vacía a la que pueda agregar al insertar el primer valor de una clave). En casos como esos, es posible que encuentre el collections.defaultdict()tipo que le interese.

En código antiguo, también puedes encontrar algunos usos de has_key(), un método obsoleto para verificar la existencia de claves en diccionarios (solo usa key_name in dict_name, en su lugar).

Michael Aaron Safyan avatar Oct 21 '2009 19:10 Michael Aaron Safyan

Puedes acortar tu código a esto:

if 'key1' in my_dict:
    ...

Sin embargo, esto es, en el mejor de los casos, una mejora cosmética. ¿Por qué cree que esta no es la mejor manera?

Greg Hewgill avatar Oct 21 '2009 19:10 Greg Hewgill