62 votes

Accéder à la clé dict et retourner None si elle n'existe pas.

En Python, quel est le moyen le plus efficace de le faire :

my_var = some_var['my_key'] | None

c'est-à-dire assigner some_var['my_key'] a my_var si some_var contient 'my_key' sinon, faites my_var être None .

69voto

Endophage Points 6879

Python lancera un KeyError si la clé n'existe pas dans le dictionnaire. Vous ne pouvez donc pas écrire votre code de la même manière que votre JavaScript. Cependant, si vous travaillez spécifiquement avec des dicts comme dans votre exemple, il existe une très belle fonction mydict.get('key', default) qui tente d'obtenir la clé du dictionnaire et renvoie la valeur par défaut si la clé n'existe pas.

Si vous voulez juste être par défaut None vous n'avez pas besoin de passer explicitement le second argument.

En fonction de ce que contient votre dict et de la fréquence à laquelle vous prévoyez d'accéder à des clés non définies, vous pouvez également être intéressé par l'utilisation de la fonction defaultdict de la collections paquet. Il prend une fabrique et l'utilise pour renvoyer de nouvelles valeurs à partir de la base de données de la __missing__ lorsque vous accédez à une clé qui n'a pas été explicitement définie. C'est particulièrement utile si votre dict ne doit contenir qu'un seul type.

from collections import defaultdict

foo = defaultdict(list)
bar = foo["unset"]
# bar is now a new empty list

N.B. La documentation (pour 2.7.13) affirme que si vous ne passez pas un argument à defaultdict il reviendra None pour les touches non réglées. Lorsque je l'ai essayé (sous 2.7.10, c'est ce que j'avais installé par hasard), cela n'a pas fonctionné et j'ai reçu une KeyError . YMMV. Sinon, vous pouvez simplement utiliser un lambda : defaultdict(lambda: None)

47voto

David Heffernan Points 292687

Vous êtes à la recherche de la get() méthode de dict .

my_var = some_var.get('some_key')

El get() retournera la valeur associée à 'some_key' si une telle valeur existe. Si la clé n'est pas présente, alors None sera renvoyé.

17voto

wocoburguesa Points 688

Ce qui est génial avec le .get() est que vous pouvez définir une valeur à retourner au cas où la clé n'existe pas.

my_dict = { 1: 'one', 2: 'two' }
print my_dict.get(3, 'Undefined key')

s'imprimerait.

Undefined key

Ceci est très utile non seulement pour le débogage, mais aussi lors de l'analyse de json (d'après mon expérience, du moins), et vous devriez préférer l'utilisation de get() sur [] autant que possible.

15voto

Sven Marnach Points 133943

En supposant que some_var est un dictionnaire, vous avez besoin de dict.get() :

my_var = some_var.get('my_key')

Ce résultat est par défaut None si my_key est absent, mais vous pouvez fournir une autre valeur par défaut :

my_var = some_var.get('my_key', default)

5voto

S. Developer Points 116

En python "|" est traduit en "or" donc :

my_var = some_var or None

Edit :

Vous avez modifié votre message initial. La façon correcte de faire ce que vous voulez est :

my_var = some_var.get('my_key', None)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X