पायथन में सूचीबद्ध करने के लिए शब्दकोश कुंजी मूल्यों के विपरीत Iterating


132

पायथन 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

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

जवाबों:


221

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

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

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

आप कुंजी और मान दोनों को एक साथ पुनरावृत्त कर सकते हैं league.items():

for team, runs in league.items():
    runs_scored, runs_allowed = map(float, runs)

आप भी अपने ट्यूपर unpacking प्रदर्शन करते हुए पुनरावृत्ति कर सकते हैं:

for team, (runs_scored, runs_allowed) in league.items():
    runs_scored = float(runs_scored)
    runs_allowed = float(runs_allowed)

43
पाइथन 3 के बाद से तानाशाहों को हटा दिया गया। आपको इसके बजाय तानाशाही () का उपयोग करना चाहिए
सेर्गेई

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

1
dict.itervalues ​​() भी Python 3 में हटा दिया गया था। आपको इसके बजाय dict.values ​​() का उपयोग करना चाहिए
Zachary Ryan Smith

11

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

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)

@ बर्टनगस्टर: जब भी आप एक जवाब योग्य समझते हैं, कृपया अपवोट करें (पोस्ट के बाईं ओर "अप" बटन पर क्लिक करें)! इस तरह आप समुदाय की भी मदद कर रहे हैं!
StackExchange saddens डांसक

6

शब्दकोशों में एक अंतर्निहित कार्य होता है जिसे कहा जाता है 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

5

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

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

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

4

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

win_percentages = [m**2.0 / (m**2.0 + n**2.0) * 100 for m, n in [a[i] for i in NL_East]]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.