por lo general utilizar el siguiente idioma cuando se trabaja con un diccionario de Python:¿Cómo verificar una clave en un valor predeterminado sin actualizar el diccionario (Python)?
try:
val = dct[key]
except KeyError:
print key, " is not valid"
ya que para grandes diccionarios, la declaración
if key in dct:
# do something
no es muy eficiente (por lo que recuerdo haber leído, pero he también lo noté en la práctica)
Hoy estaba trabajando con un default y por un momento olvidé que un defaultjudice nunca le dará un KeyError sino que actualizará el diccionario original.
¿Cómo puedo realizar una búsqueda sin actualizar el valor predeterminado? Realmente necesito imprimir un error para que el usuario pueda volver a ingresar la clave.
¡Gracias!
ACTUALIZACIÓN: Varios carteles sugirieron que mi creencia de que if key in dct:
es lenta es falsa. Volví y revisé el libro en el que había leído que es mejor usar try: except:
. Es el Python Cookbook 2002, Recipe 1.4 de Alex Martelli, que se puede encontrar también en línea aquí: Add an entry to dictionary. ¡Los viejos recuerdos son tan poco confiables! La receta no menciona "más lento" y ni siquiera está usando in
, sino has_key
. Simplemente dice que try: except:
es más Pythonic (al menos la versión de libro de la receta). Gracias por la corrección y las respuestas.
Posible duplicado http://stackoverflow.com/questions/1602934/what-is-a-good-way-to-test-if-a-key-exists-in-python-dictionary –
No es una tontería; este es sobre 'defaultdict'. –
'clave en d' no es lento, punto. Si dices lo contrario, será mejor que tengas una prueba sólida. 'timeit' dice que es tan rápido como una' d [key] 'exitosa, y mucho (casi 10x) más rápido que' d [key] '+' except: pass' (concedido, puede ser un poco más rápido que un ' if' si la clave está casi siempre presente). Ahora, 'clave en d.keys()' (Python 2.x) o 'clave en la lista (d.keys()) '(Python 3.x) es lento, pero eso porque está deliberadamente descartando la información de la tabla hash. – delnan