2010-03-30 5 views

Répondre

32

Une autre façon de l'écrire est

res = dict((k,v) for k,v in kwargs.iteritems() if v is not None) 

En python3, cela devient

res = {k:v for k,v in kwargs.items() if v is not None} 
5

J'aime la variation de votre deuxième méthode:

res = dict((a, b) for (a, b) in kwargs.iteritems() if b is not None) 

c'est Pythonic et je ne pense pas ça moche. Une variante de votre première est:

for (a, b) in list(kwargs.iteritems()): 
     if b is None: 
      del kwargs[a] 
+1

Vous pouvez simplement utiliser kwargs.items(), qui renvoie déjà une liste. – liori

+0

'dict.items()' ne retourne plus une liste dans Python3. Cela fonctionne plutôt comme 'iteritems()' –

4

Vous pouvez également utiliser filter:

d = dict(a = 1, b = None, c = 3) 

filtered = dict(filter(lambda item: item[1] is not None, d.items())) 

print(filtered) 
{'a': 1, 'c': 3} 
2
d = {'a': None, 'b': 'myname', 'c': 122} 
print dict(filter(lambda x:x[1], d.items())) 
{'b': 'myname', 'c': 122} 
+2

En plus du code, il est d'usage d'ajouter quelques commentaires à votre réponse. – aliteralmind

+0

Merci. Je le ferai à partir de la prochaine fois. – Sandilya

Questions connexes