Compruebe si ya existe una clave determinada en un diccionario
Para tener la idea de cómo hacerlo, primero inspeccionamos qué métodos podemos llamar en el diccionario. Aquí están los métodos:
d={'clear':0, 'copy':1, 'fromkeys':2, 'get':3, 'items':4, 'keys':5, 'pop':6, 'popitem':7, 'setdefault':8, 'update':9, 'values':10}
Python Dictionary clear() Removes all Items
Python Dictionary copy() Returns Shallow Copy of a Dictionary
Python Dictionary fromkeys() Creates dictionary from given sequence
Python Dictionary get() Returns Value of The Key
Python Dictionary items() Returns view of dictionary (key, value) pair
Python Dictionary keys() Returns View Object of All Keys
Python Dictionary pop() Removes and returns element having given key
Python Dictionary popitem() Returns & Removes Element From Dictionary
Python Dictionary setdefault() Inserts Key With a Value if Key is not Present
Python Dictionary update() Updates the Dictionary
Python Dictionary values() Returns view of all values in dictionary
El método brutal para verificar si la clave ya existe puede ser el get()
método:
d.get("key")
Los otros dos métodos y sonidos interesantes parecen demasiado trabajo. Así que examinemos si es el método correcto para nosotros. Tenemos nuestro dict :items()
keys()
get()
d
d= {'clear':0, 'copy':1, 'fromkeys':2, 'get':3, 'items':4, 'keys':5, 'pop':6, 'popitem':7, 'setdefault':8, 'update':9, 'values':10}
La impresión muestra que la clave que no tenemos regresará None
:
print(d.get('key')) #None
print(d.get('clear')) #0
print(d.get('copy')) #1
Nosotros podemos usar eso para obtener la información si la clave está presente o no. Pero considere esto si creamos un dict con un solo key:None
:
d= {'key':None}
print(d.get('key')) #None
print(d.get('key2')) #None
Liderar ese get()
método no es confiable en caso de que algunos valores lo sean None
. Esta historia debería tener un final más feliz. Si usamos el in
comparador:
print('key' in d) #True
print('key2' in d) #False
Obtenemos los resultados correctos. Podemos examinar el código de bytes de Python:
import dis
dis.dis("'key' in d")
# 1 0 LOAD_CONST 0 ('key')
# 2 LOAD_NAME 0 (d)
# 4 COMPARE_OP 6 (in)
# 6 RETURN_VALUE
dis.dis("d.get('key2')")
# 1 0 LOAD_NAME 0 (d)
# 2 LOAD_METHOD 1 (get)
# 4 LOAD_CONST 0 ('key2')
# 6 CALL_METHOD 1
# 8 RETURN_VALUE
Esto muestra que el in
operador de comparación no solo es más confiable sino incluso más rápido que get()
.
dict.keys()
crean una lista de claves, de acuerdo con la documentación docs.python.org/2/library/stdtypes.html#dict.keys, pero me sorprendería si este patrón no estuviera optimizado para, en una implementación seria, traducir aif 'key1' in dict:
.