Python: compruebe si la clave existe en el diccionario

P

 

Introducción

El diccionario (también conocido como ‘mapa’, ‘hash’ o ‘matriz asociativa’) es un contenedor Python integrado que almacena elementos como un par clave-valor.

Al igual que otros contenedores tienen indexación numérica, aquí usamos claves como índices. Las claves pueden ser valores numéricos o de cadena. Sin embargo, ninguna secuencia u objeto mutable se puede utilizar como clave, como una lista.

En este artículo, veremos cómo verificar si existe una clave en un diccionario en Python.

En los ejemplos, usaremos esto fruits_dict diccionario:

fruits_dict = dict(apple= 1, mango= 3, banana= 4)
{'apple': 1, 'banana': 4, 'mango': 3}

Compruebe si la clave existe usando en el operador

La forma más sencilla de comprobar si existe una clave en un diccionario es utilizar la in operador. Es un operador especial que se utiliza para evaluar la pertenencia de un valor.

Aquí evaluará a True si la clave existe o para False si no es así:

key = 'orange'

if key in fruits_dict:
    print('Key Found')
else:
    print('Key not found')

Ahora, dado que no tenemos un orange en nuestro diccionario, este es el resultado:

Key not found

Este es el enfoque deseado y preferido por la mayoría de los desarrolladores. Debajo del capó, utiliza el __contains__() función para comprobar si una tecla determinada es in un diccionario o no.

Compruebe si la clave existe usando get ()

los get() la función acepta un key, y un valor opcional que se devolverá si el key no se encuentra. De forma predeterminada, este valor opcional es None. Podemos intentar obtener una clave, y si el valor devuelto es None, eso significa que no está presente en el diccionario:

key = 'orange'

if fruits_dict.get(key) == None:
    print('Key not found')
else:
    print('Key found') 

Esto resulta en:

Key not found

Compruebe si la clave existe usando las teclas ()

los keys() La función devuelve las claves de nuestro diccionario como una secuencia:

fruits_dict.keys()

Esta secuencia contiene:

dict_keys(['apple', 'mango', 'banana'])

Usando esta secuencia, podemos verificar si la clave está presente. Puede hacer esto a través de un bucle, o mejor aún, use el in operador:

key = 'orange'

if key in fruits_dict.keys():
    print('Key found')
else:
    print('Key not found')

Esto también resulta en:

Key not found

Verifique si la clave existe usando has_key ()

En lugar de obtener manualmente las claves y ejecutar una verificación si el valor que estamos buscando está presente, podemos usar el método abreviado has_key() función:

key = 'orange'

if fruits_dict.has_key(key):
    print('Key found')
else:
    print('Key not found')

Vuelve True o False, basado en la presencia de la clave. Este código genera:

Key not found

Manejo de la excepción ‘KeyError’

Una forma interesante de evitar problemas con una clave inexistente o, en otras palabras, de comprobar si existe una clave en nuestro diccionario o no, es utilizar la try y except cláusula para manejar el KeyError excepción.

La siguiente excepción se genera cada vez que nuestro programa no localiza la clave respectiva en el diccionario.

Es una forma simple, elegante y rápida de manejar la búsqueda de claves:

try:
    fruits_dict[key]
except KeyError as err:
    print('Key not found')

Este enfoque, aunque puede parecer poco intuitivo, en realidad es significativamente más rápido que algunos otros enfoques que hemos cubierto hasta ahora.

Nota: Tenga en cuenta que las excepciones no deben usarse para alterar el flujo de código o para implementar la lógica. Disparan muy rápido, pero recuperarse de ellos es muy lento. Este enfoque no debe favorecerse sobre otros enfoques, cuando sea posible.

Comparemos su rendimiento para tener una mejor idea de qué tan rápido se pueden ejecutar.

Comparación de rendimiento

import timeit

code_setup = """
key = 'orange'
fruits_dict = dict(apple= 1, mango= 3, banana= 4)
"""

code_1 = """
if key in fruits_dict:
  # print('Key Found')
  pass
else:
  # print('Key not found')
  pass 
"""

code_2 = """
if fruits_dict.get(key):
  # print('Key found')
  pass
else:
  # print('Key not found')
  pass 
"""

code_3 = """
if fruits_dict.__contains__(key):
  # print('Key found')
  pass
else:
  # print('Key not found')
  pass  
"""

code_4 = """
try:
  # fruits_dict[key]
  pass
except KeyError as err:
  # print('Key not found')
  pass 
"""
  
code_5 = """
if key in fruits_dict.keys():
  # print('Key found')
  pass
else:
  # print('Key not found')
  pass 
"""

print('Time of code_1: ', timeit.timeit(setup = code_setup , stmt= code_1, number= 10000000))
print('Time of code_2: ', timeit.timeit(setup = code_setup , stmt= code_2, number= 10000000))
print('Time of code_3: ', timeit.timeit(setup = code_setup , stmt= code_3, number= 10000000))
print('Time of code_4: ', timeit.timeit(setup = code_setup , stmt= code_4, number= 10000000))
print('Time of code_5: ', timeit.timeit(setup = code_setup , stmt= code_5, number= 10000000))

Esto produce:

Time of code_1:  0.2753713619995324
Time of code_2:  0.8163219139996727
Time of code_3:  0.5563563220002834
Time of code_4:  0.1561058730003424
Time of code_5:  0.7869278369998938

La elección y el enfoque más populares, de utilizar el in El operador es bastante rápido y también es el enfoque previsto para resolver este problema.

Conclusión

En este artículo, discutimos varias formas de verificar si existe una clave en nuestro diccionario o no. Luego hicimos una comparación de desempeño.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad