Iterieren über Wörterbuchschlüsselwerte, die der Liste in Python entsprechen


132

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

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 Schlüssel) zu iterieren.

Hier ist der Code, den ich verwende. Im Moment kann ich nur Team für Team gehen. Wie würde ich über jedes Team iterieren und den erwarteten win_percentage für jedes Team drucken?

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.

Antworten:


221

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

Wenn Sie über das Wörterbuch selbst iterieren ( for team in league), werden Sie über die Schlüssel des Wörterbuchs iterieren. Beim Schleifen mit einer for-Schleife ist das Verhalten das gleiche, unabhängig davon, ob Sie das dict ( league) selbst durchlaufen oder league.keys():

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

Sie können auch sowohl die Schlüssel als auch die Werte gleichzeitig durchlaufen, indem Sie Folgendes durchlaufen league.items():

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

Sie können sogar Ihr Tupel auspacken, während Sie iterieren:

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

43
dict.iteritems () wurde seit Python3 entfernt. Sie sollten stattdessen dict.items () verwenden
Sergey

14
dict.iterkeys () wurde auch in Python 3 entfernt. Sie sollten stattdessen dict.keys () verwenden
Nerrve

1
dict.itervalues ​​() wurde auch in Python 3 entfernt. Sie sollten stattdessen dict.values ​​() verwenden
Zachary Ryan Smith

11

Sie können auch sehr einfach Wörterbücher 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)

@BurtonGuster: Wann immer Sie eine Antwort für würdig halten, stimmen Sie bitte ab (klicken Sie auf die Schaltfläche "Auf" auf der linken Seite des Beitrags)! Auf diese Weise helfen Sie auch der Community!
StackExchange saddens dancek 14.

6

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

5

Mit Wörterbuchobjekten können Sie über ihre Elemente iterieren. Mit Pattern Matching und der Trennung von __future__können Sie die Dinge ein wenig vereinfachen.

Schließlich können Sie Ihre Logik von Ihrem Druck trennen, um das spätere Refactor / 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

4

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]]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.