2010-12-14 5 views
10

Me preguntaba si el siguiente estilo es una práctica común para evitar la clave que no se encuentra en un diccionario?¿Es esta práctica común para evitar la clave que no se encuentra en un diccionario

# default is 0 
value = my_dic[100] if 100 in my_dic else 0 
+2

ver a Chris' a continuación. ¡Debería consultar la documentación oficial de Python en caso de duda, está muy bien escrita y completa! El conjunto de documentos de idiomas más útil que he visto. – slezica

Respuesta

32
value = my_dic.get(100, 0) 
+0

esto es interesante, nunca lo había visto antes, @chris. podrías eleaborate solo un poco? ¿Es esto una construcción python 3+? – Ramy

+1

no funciona al menos en python 2.6 –

+0

+1 para compacto e interesante! –

1

Si intenta acceder a una clave que no está en el diccionario, python generará una excepción que bloqueará su programa. En lugar de esto, debes "atrapar" la excepción y hacer algo más elegante.

Es mejor práctica para detectar la excepción:

try: 
    value = my_dic[100] 
except KeyError: 
    print("key not found in dictionary") #or handle the error more elegantly 

No he leído el artículo, pero se puede aprender más aquí: http://en.wikipedia.org/wiki/Exception_handling

+1

'excepto KeyError', por favor, no' excepto'. –

+0

serio? Pensé que intentar conectar un controlador de excepción tendría un impacto en el rendimiento. –

+0

@Chris, otro buen punto. no OVER OVER excepciones. – Ramy

2

Si necesita el "valor por defecto "en todas partes, considere defaultdict como una alternativa posible. (Un enfoque de fábrica/devolución de llamada ofrece una buena flexibilidad con el "valor predeterminado").

Happy coding.

0

Es válida la sintaxis de Python, sin embargo yo diría que de acuerdo con Python Coding Style Guidelines Usted debe estructurar su caso else, así como la respuesta

if <condition>: 
    <statements> 
else: 
    <statements> 
+0

Por favor, no haga 'if (condición):'. Solo haz 'si condición:'. * No necesitamos paréntesis gratuitos. * –

+2

lo siento, quiero decir pero estaba tratando de escribir rápido porque estaba asumiendo que sería respondido rápidamente. –

+2

El código del OP es una [expresión condicional] (http://docs.python.org/reference/expressions.html?highlight=conditional#conditional-expressions), no una declaración 'if' [compound], por lo que para por lo menos esa razón, su respuesta no es especialmente relevante. – martineau

Cuestiones relacionadas