it-swarm.com.de

Iterieren über Dictionary-Schlüsselwerte, die der Liste in Python entsprechen

Arbeiten in Python 2.7. Ich habe ein Wörterbuch mit Teamnamen als Schlüssel und der Anzahl der erzielten Läufe und für jedes Team als Werteliste erlaubt:

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

Ich möchte in der Lage sein, das Wörterbuch in eine Funktion einzuspeisen und über jedes Team (die Tasten) zu iterieren.

Hier ist der Code, den ich benutze. Im Moment kann ich nur Team für Team gehen. Wie würde ich jedes Team durchlaufen und den erwarteten win_percentage für jedes Team ausdrucken?

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

Vielen Dank für jede Hilfe.

122
Burton Guster

Sie haben mehrere Möglichkeiten, ein Wörterbuch zu durchlaufen.

Wenn Sie das Wörterbuch selbst durchlaufen (for team in league), Werden Sie die Schlüssel des Wörterbuchs durchlaufen. Wenn Sie eine Schleife mit einer for-Schleife ausführen, ist das Verhalten dasselbe, unabhängig davon, ob Sie den Befehl (league) selbst oder league.keys() durchlaufen:

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

Sie können auch die Tasten und die Werte gleichzeitig durchlaufen, indem Sie league.items() durchlaufen:

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

Sie können das Tuple-Entpacken sogar während der Iteration durchführen:

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

Sie können Wörterbücher auch sehr einfach durchlaufen:

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)
10
dancek

Wörterbücher haben eine eingebaute Funktion namens iterkeys().

Versuchen:

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
6
HodofHod

Mit Dictionary-Objekten können Sie ihre Elemente durchlaufen. Auch mit Pattern Matching und der Division von __future__ Sie können die Dinge ein wenig vereinfachen.

Schließlich können Sie Ihre Logik von Ihrem Druck trennen, um das spätere Umgestalten/Debuggen zu vereinfachen.

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
5
Swiss

Listenverständnis kann Dinge verkürzen ...

win_percentages = [m**2.0 / (m**2.0 + n**2.0) * 100 for m, n in [a[i] for i in NL_East]]
3
Benjamin