6
votes

Vérifiez si la clé existe et obtenez la valeur en même temps à Python?

Parfois, nous devrions peut-être vérifier l'existence d'une clé dans un dictionnaire et faire quelque chose si la valeur correspondante existe.

Habituellement, je procède de cette manière: p>

try:
    value = my_dict[key]
    # Do something
except KeyError:
    pass


5 commentaires

Dans Python ESSAYER / SAUF Clostly convient au paradigme "Demander le pardon, pas la permission". Sinon, vous devez utiliser .get () avec une valeur par défaut qui jamais apparaît comme une valeur valide pour votre dictionnaire. Quelque chose comme float ('- INF') peut-être?


Vous pouvez essayer d'utiliser une valeur par défaut qui est peu susceptible d'être présent dans vos données, comme un objet de la classe ellipsis , par exemple. my_dict.get (clé, ...) .


En Python, Essayez / sauf est le moyen (correct, accepté et normal ) faire cela . Le style associé à cette approche a même son propre nom .


TRY..EXCEPT est probablement la meilleure façon la plus pythonique de le faire (sauf si vous attendez beaucoup de recherches échouées, auquel cas si serait préférable).


Dans de nombreuses langues, la culture est que les exceptions ne sont que pour les erreurs, pas le flux de contrôle normal. Python rejette explicitement cela. Même la boucle pour est implémentée en utilisant des exceptions; Il est tout à fait normal d'attraper des exceptions dans des situations de non-erreur en Python.


3 Réponses :


7
votes

Si les situations avec des valeurs manquantes sont vraiment exceptionnelles, la gestion des exceptions est appropriée: xxx pré>

Si les touches manquantes et présentes doivent être manipulées, votre première option est utile. P >

if key in my_dict:
    value = my_dict[key]
    # Do something


2 commentaires

Pourriez-vous élaborer lors de la dernière remarque? Je dirais valeur = my_dict.get (touche "") est assez facile à lire et à moins de code.


@Bartfriederichs En général, vous ne pouvez pas être sûr que votre valeur par défaut n'existe pas dans le dictionnaire afin que vous puissiez être potentiellement incapable de distinguer entre la clé valide et la clé invalide. Ensuite, vous ne pouvez pas traiter les clés non valides différemment selon les besoins.



2
votes

Comme mentionné plusieurs fois, la manipulation des exceptions est la voie à suivre. Toutefois, si vous souhaitez utiliser obtenir et Aucun est une valeur possible, créez un nouvel objet pour agir comme Sentinel "non trouvé". (Depuis que vous venez de créer l'objet, il est impossible que ce soit une entrée valide dans votre dict . Eh bien, pas impossible, mais vous devrez vraiment sortir de votre chemin pour l'ajouter à le dict .) xxx


0 commentaires

1
votes
if (dict.get('key') is not None) and ('key' in dict):
    var = dict['key']
Second portion of if-statement may not be totally necessary but I have used this format in my own code and it does the job.

0 commentaires