2010-12-14 20 views
10

Je me demandais si le style suivant est une pratique courante pour éviter une clé introuvable dans un dictionnaire?Est-ce une pratique courante d'éviter une clé introuvable dans un dictionnaire

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

Voir Chris réponse ci-dessous. Vous devriez vérifier la documentation officielle de Python en cas de doute, c'est très bien écrit et complet! L'ensemble de documents de langue le plus utile que j'ai vu. – slezica

Répondre

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

c'est intéressant, je ne l'ai jamais vu auparavant, @chris. Peux-tu éléborer juste un peu? est-ce une construction python 3+? – Ramy

+1

nope fonctionne au moins en python 2.6 –

+0

+1 pour compact et intéressant! –

1

Si vous essayez d'accéder à une clé qui ne se trouve pas dans le dictionnaire, python lèvera une exception qui plantera votre programme. Au lieu de cela, vous devriez "attraper" l'exception et faire quelque chose de plus gracieux.

il est préférable d'intercepter l'exception:

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

Je n'ai pas lu l'article, mais vous pouvez en savoir plus ici: http://en.wikipedia.org/wiki/Exception_handling

+1

'sauf KeyError', s'il vous plaît, pas' except'. –

+0

sérieux? Je pensais essayer d'accrocher une poignée d'exception aura un impact sur les performances. –

+0

@Chris, un autre bon point. ne pas surpasser les exceptions. – Ramy

2

Si vous avez besoin de la « valeur par défaut "partout, considérons defaultdict comme une alternative possible. (Une approche usine/rappel offre une bonne flexibilité avec la "valeur par défaut".)

Bonne codification.

0

Il est syntaxe python valide, mais je dirais que, selon Python Coding Style Guidelines Vous devriez structurer votre instruction if autre comme si,

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

Veuillez ne pas faire 'if (condition):'. Faites juste 'if condition:'. * Nous n'avons pas besoin de parenthèses gratuites. * –

+2

désolé, je veux dire mais j'essayais de taper rapidement parce que je supposais qu'il obtiendrait une réponse rapide. –

+2

Le code de l'OP est une [expression conditionnelle] (http://docs.python.org/reference/expressions.html?highlight=conditional#conditional-expressions), pas une instruction 'if' [composé] - donc pour au moins cette raison, votre réponse n'est pas particulièrement pertinente. – martineau