2011-09-13 12 views
88

पायथन 2.7 में काम करना।कुंजी मूल्यों पर इटरेटिंग पाइथन में सूची के अनुरूप

NL_East = {'Phillies': [645, 469], 'Braves': [599, 548], 'Mets': [653, 672]} 

मैं चाहते हैं एक समारोह में शब्दकोश को खिलाने के लिए सक्षम हो सकता है और प्रत्येक पर पुनरावृति करने के लिए: मैं कुंजी और रन बनाए और मूल्य सूची के रूप में प्रत्येक टीम के लिए अनुमति दी रनों की राशि के रूप में टीम के नाम के साथ एक शब्दकोश है टीम (चाबियाँ)।

यहां कोड है जिसका मैं उपयोग कर रहा हूं। अभी, मैं केवल टीम द्वारा टीम जा सकता हूं। मैं प्रत्येक टीम के लिए कैसे पुन: प्रयास करूंगा और प्रत्येक टीम के लिए अपेक्षित win_percentage प्रिंट करूं?

def Pythag(league): 
    runs_scored = float(league['Phillies'][0]) 
    runs_allowed = float(league['Phillies'][1]) 
    win_percentage = round((runs_scored**2)/((runs_scored**2)+(runs_allowed**2))*1000) 
    print win_percentage 

किसी भी मदद के लिए धन्यवाद।

+1

'dic.items()' ... – JBernardo

उत्तर

141

आप एक शब्दकोश से अधिक पुनरावृत्ति के लिए कई विकल्प हैं।

आप शब्दकोश में ही (for team in league) से अधिक पुनरावृति हैं, तो आप शब्दकोश के चाबियाँ पर बार-बार दोहराना होगा। लूप के साथ लूपिंग करते समय, व्यवहार वही होगा चाहे आप dict() पर, league.keys(), या league.iterkeys() पर लूप करें। dict.iterkeys() आम तौर पर पसंद किया जाता है क्योंकि यह स्पष्ट और कुशल है:

for team, runs in league.iteritems(): 
    runs_scored, runs_allowed = map(float, runs) 
तुम भी अपने प्रदर्शन कर सकते हैं:

for team in league.iterkeys(): 
    runs_scored, runs_allowed = map(float, league[team]) 

तुम भी पुनरावृत्ति league.items() से अधिक या league.iteritems() द्वारा एक ही बार में दोनों कुंजी और मूल्यों से अधिक पुनरावृति कर सकते हैं terle unpacking जबकि iterating:

for team, (runs_scored, runs_allowed) in league.iteritems(): 
    runs_scored = float(runs_scored) 
    runs_allowed = float(runs_allowed) 
+28

dict.iteritems() python3 के बाद से हटा दिया गया था। आप dict.items का उपयोग करना चाहिए() के बजाय – Sergey

+11

dict.iterkeys() भी अजगर 3. आप dict.keys का उपयोग करना चाहिए (में हटा दिया गया था) के बजाय – Nerrve

8

आप बहुत आसानी से खत्म हो गया शब्दकोशों भी पुनरावृति कर सकते हैं:

for team, scores in NL_East.iteritems(): 
    runs_scored = float(scores[0]) 
    runs_allowed = float(scores[1]) 
    win_percentage = round((runs_scored**2)/((runs_scored**2)+(runs_allowed**2))*1000) 
    print '%s: %.1f%%' % (team, win_percentage) 
+0

मदद के लिए धन्यवाद! कोड महान काम किया। –

+0

@BurtonGuster: जब भी आप एक जवाब योग्य लगता है, कृपया वोट दें (पोस्ट की बाईं ओर स्थित "ऊपर" बटन क्लिक करें)! इस तरह आप समुदाय की भी मदद कर रहे हैं! – dancek

5

शब्दकोश एक iterkeys() बुलाया समारोह में निर्माण किया है।

प्रयास करें:

for team in league.iterkeys(): 
    runs_scored = float(league[team][0]) 
    runs_allowed = float(league[team][1]) 
    win_percentage = round((runs_scored**2)/((runs_scored**2)+(runs_allowed**2))*1000) 
    print win_percentage 
+0

मदद के लिए धन्यवाद! –

4

शब्दकोश वस्तुएं आपको अपने सामानों पर फिर से शुरू करने की अनुमति देती हैं। साथ ही, पैटर्न मिलान और __future__ से विभाजन के साथ आप चीजों को थोड़ा सा सरल बना सकते हैं।

अंत में, आप अपने मुद्रण से अपने तर्क को अलग बातें थोड़ा आसान बाद में/डिबग refactor करने के लिए बनाने के लिए कर सकते हैं।

from __future__ import division 

def Pythag(league): 
    def win_percentages(): 
     for team, (runs_scored, runs_allowed) in league.iteritems(): 
      win_percentage = round((runs_scored**2)/((runs_scored**2)+(runs_allowed**2))*1000) 
      yield win_percentage 

    for win_percentage in win_percentages(): 
     print win_percentage 
2

सूची समझ बातें छोटा कर सकते हैं ...

win_percentages = [m**2.0/(m**2.0 + n**2.0) * 100 for m, n in [a[i] for i in NL_East]] 
संबंधित मुद्दे