2010-05-12 6 views
0

J'ai ce morceau de code, qui à mon avis est assez laid et je me demande comment on peut faire mieux:petit code python refactor

if dic.get(key, None) is None: 
    dic[key] = None 

Points pour l'élégance ;-)

Répondre

7
if key not in dic: 
    dic[key] = None 

Cela peut ne pas être aussi court que le code d'Olivier, mais au moins c'est explicite et rapide.

S'il vous plaît, n'utilisez pas dict comme nom de variable, il ombragé intégré.

10
d.setdefault(key) # sets d[key] to None if key is not in d 
+0

Vous n'avez pas besoin d'avoir 'None' explicitement, l'argument' default' par défaut 'None' – SilentGhost

+0

@SilentGhost: hehe, je m'en suis rendu compte et j'ai changé ma réponse précisément en même temps que vous écriviez le commentaire. :-) –

+0

Ceci est * considérablement * plus rapide que toute autre méthode, car il implémente le contrôle en C et évite ainsi tout le comptage de référence temporaire. –

3
import collections 

mydict = collections.defaultdict(lambda: None) 

Maintenant, tout accès à mydict[akey] sera (si akey était pas présente comme une clé dans mydict) fixé mydict[akey]-None comme un effet secondaire.

Notez que l'initialiseur defaultdict nécessite un argument sans argument, d'où lambda.