2013-07-25 22 views
7

मेरे पास शब्दकोशों की एक सूची है। प्रत्येक शब्दकोश में एक पूर्णांक कुंजी और ट्यूपल मान होता है। मैं ट्यूपल की एक निश्चित स्थिति में स्थित सभी तत्वों को जोड़ना चाहता हूं।पाइथन शब्दकोशों की सूची [int: tuple] Sum

उदाहरण:

myList = [{1000:("a",10)},{1001:("b",20)},{1003:("c",30)},{1000:("d",40)}] 

मैं जानता हूँ कि मैं कुछ ऐसा कर सकता है:

sum = 0 
for i in myList: 
    for i in myList: 
     temp = i.keys() 
     sum += i[temp[0]][1] 
print sum 

वहाँ ऐसा करने का एक और अधिक pythonic तरीका है? धन्यवाद

+2

अंगूठे का सामान्य नियम: यदि आप सीधे उपयोग कर रहे हैं एक पाश के लिए काम करने के लिए एक और अधिक pythonic तरीका नहीं है। –

+5

@ स्लेटरररिनस: मैं यह नहीं कहूंगा कि 'फॉर लूप' के लिए बहुत सारे पायथनिक उपयोग हैं। –

+1

@MartijnPieters मुझे यकीन है कि वे मौजूद हैं, लेकिन मुझे लगता है कि लूप के लिए सभी मल्टी-लाइन के 90% से ऊपर की तरह कोड के संकेतक हैं जिन्हें दोबारा सुधारने की आवश्यकता है। स्पष्टीकरण के लिए: सीधे लूप का उपयोग करके मेरा मतलब है कि ऑनलाइन वाक्यविन्यास का उपयोग नहीं करना है। –

उत्तर

7

तो उनके मूल्यों सब शब्दकोशों के ऊपर पाशन एक जनरेटर अभिव्यक्ति का उपयोग करें:

sum(v[1] for d in myList for v in d.itervalues()) 

अजगर 3 के लिए, d.values() साथ d.itervalues() स्थानापन्न।

डेमो:

>>> sum(v[1] for d in myList for v in d.itervalues()) 
100 
0
import itertools 
sum((v[1][1] for v in itertools.chain(*[d.items() for d in myList]))) 

itertools कर सकते हैं "श्रृंखला" एक साथ कई वहाँ के लिए सूचियों तार्किक एक हैं।

0

अगर यह एक अधिक pythonic तरीका है मैं नहीं जानता:

print sum([i[i.keys()[0]][1] for i in myList]) 
संबंधित मुद्दे