2016-01-31 9 views
6

Mam słownika Pythona z ciąg kluczy, wartości całkowite. Chcę znaleźć sumę wartości, jeśli klucz nie jest "?". Mogę znaleźć sumę za pomocą pętli for takiej jak ta.zmniejszenie wartości słownika Pythona, jeśli klucz spełnia warunek

d = {'a':20, 'b': 20, '?': 10} 
sum = 0 
for k in d.keys(): 
    if k != '?': 
     sum += d[k] 
print "This is my sum: " + sum 

Wyłącznie ze względu na samą ambicję, chciałbym ją przekształcić w funkcję reduce(). Zrobiłem to:

sum = reduce(lambda s, k: s if k == '?' else s += d[k], d.keys()) 

, ale tak naprawdę nie wiem, co robię. Jestem pewien, że ktoś z lepszymi funkcjonalnymi kotletami niż ja mogę to zrobić w kilka minut. Pomóż mi?

Odpowiedz

6

można po prostu użyć wbudowanej sum():

>>> d = {'a':20, 'b': 20, '?': 10} 
>>> sum(value for key, value in d.items() if key != "?") 
40 
4

ponieważ klucz '?' może pojawić się tylko jeden lub zero razy, po prostu odjąć wartość dla tego klucza od sumy:

>>> sum(d.values()) - d.get('?', 0) 
40 
Powiązane problemy