2016-01-31 12 views
6

से मिलती है तो मेरे पास स्ट्रिंग कुंजियों, पूर्णांक मानों वाला एक पायथन शब्दकोश होता है। यदि कुंजी '?' नहीं है तो मैं मानों का योग ढूंढना चाहता हूं। मैं इस तरह के लूप का उपयोग कर योग पा सकता हूं।पाइथन शब्द मान को कम करें यदि कुंजी स्थिति

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

केवल महत्वाकांक्षा के लिए, मैं वास्तव में इसे कम() फ़ंक्शन में दोबारा प्रतिक्रिया देना चाहता हूं। मैंने इसमें एक स्टैब लिया:

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

लेकिन मुझे वास्तव में पता नहीं है कि मैं क्या कर रहा हूं। मुझे यकीन है कि बेहतर कार्यात्मक चॉप वाले किसी व्यक्ति को मैं मिनटों में ऐसा कर सकता हूं। मेरी मदद करें?

उत्तर

6

तुम बस का उपयोग कर सकते निर्मित sum():

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

कुंजी '?' के बाद से केवल एक या शून्य बार दिखाई दे सकते हैं, बस राशि से उस कुंजी के लिए मूल्य घटाना:

>>> sum(d.values()) - d.get('?', 0) 
40 
संबंधित मुद्दे