Itération sur les valeurs clés du dictionnaire correspondant à la liste en Python


132

Travailler en Python 2.7. J'ai un dictionnaire avec les noms des équipes comme clés et le nombre de points marqués et autorisés pour chaque équipe comme liste de valeurs:

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

J'aimerais pouvoir alimenter le dictionnaire dans une fonction et parcourir chaque équipe (les touches).

Voici le code que j'utilise. Pour le moment, je ne peux aller équipe par équipe. Comment pourrais-je parcourir chaque équipe et imprimer le win_percentage attendu pour chaque équipe?

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

Merci pour toute aide.

Réponses:


221

Vous disposez de plusieurs options pour parcourir un dictionnaire.

Si vous effectuez une itération sur le dictionnaire lui-même ( for team in league), vous itérez sur les clés du dictionnaire. Lors d'une boucle avec une boucle for, le comportement sera le même que vous boucliez sur dict ( league) lui-même, ou league.keys():

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

Vous pouvez également parcourir les clés et les valeurs à la fois en itérant sur league.items():

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

Vous pouvez même effectuer le déballage de votre tuple lors de l'itération:

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

43
dict.iteritems () a été supprimé depuis Python3. Vous devriez utiliser dict.items () à la place
Sergey

14
dict.iterkeys () a également été supprimé dans Python 3. Vous devriez utiliser dict.keys () à la place
Nerrve

1
dict.itervalues ​​() a également été supprimé dans Python 3. Vous devriez utiliser dict.values ​​() à la place
Zachary Ryan Smith

11

Vous pouvez également parcourir très facilement les dictionnaires:

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: Chaque fois que vous pensez qu'une réponse vaut la peine, veuillez voter pour (cliquez sur le bouton «haut» sur le côté gauche du message)! De cette façon, vous aidez aussi la communauté!
StackExchange triste dancek le

6

Les dictionnaires ont une fonction intégrée appelée iterkeys().

Essayer:

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

Les objets dictionnaire vous permettent de parcourir leurs éléments. En outre, avec la correspondance de motifs et la division de, __future__vous pouvez simplifier un peu les choses.

Enfin, vous pouvez séparer votre logique de votre impression pour rendre les choses un peu plus faciles à refactoriser / déboguer plus tard.

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

La compréhension de liste peut raccourcir les choses ...

win_percentages = [m**2.0 / (m**2.0 + n**2.0) * 100 for m, n in [a[i] for i in NL_East]]
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.