140 votes

Itération sur les valeurs de clés de dictionnaire correspondant à une liste en Python

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

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

Je voudrais pouvoir introduire le dictionnaire dans une fonction et itérer sur chaque équipe (les clés).

Voici le code que j'utilise. Pour l'instant, je ne peux aller qu'équipe par équipe. Comment pourrais-je itérer sur chaque équipe et imprimer le pourcentage de victoire 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.

231voto

Andrew Clark Points 77748

Vous avez plusieurs possibilités pour itérer sur un dictionnaire.

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

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

Vous pouvez également itérer sur les clés et les valeurs en même temps 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 des tuple pendant l'itération :

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

44 votes

Dict.iteritems() a été supprimé depuis Python3. Vous devez utiliser dict.items() à la place

15 votes

Dict.iterkeys() a également été supprimé dans Python 3. Vous devez utiliser dict.keys() à la place

2 votes

Dict.itervalues() a également été supprimé dans Python 3. Vous devez utiliser dict.values() à la place

11voto

dancek Points 1987

Vous pouvez aussi très facilement itérer sur des 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)

0 votes

@BurtonGuster : Chaque fois que vous pensez qu'une réponse est digne d'intérêt, veuillez voter en haut (cliquez sur le bouton "haut" à gauche du message) ! De cette façon, vous aidez aussi la communauté !

6voto

HodofHod Points 530

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

Essayez :

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

5voto

Swiss Points 2952

Les objets du dictionnaire vous permettent d'itérer sur leurs éléments. De plus, grâce au filtrage et à la division de __future__ vous pouvez simplifier un peu les choses.

Enfin, vous pouvez séparer votre logique de votre impression pour faciliter le remaniement et le débogage ultérieurs.

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

4voto

Benjamin Points 3269

La compréhension de la 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]]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X