Travailler dans 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]}
Je voudrais pouvoir insérer le dictionnaire dans une fonction et parcourir chaque équipe (les clés).
Voici le code que j'utilise. À l'heure actuelle, je ne peux aller équipe par équipe. Comment pourrais-je parcourir 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.
Vous avez plusieurs options pour parcourir un dictionnaire.
Si vous parcourez le dictionnaire lui-même (for team in league
]), vous effectuerez une itération sur les clés du dictionnaire. Lorsque vous bouclez avec une boucle for, le comportement sera le même si vous passez en boucle 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 parcourir simultanément les clés et les valeurs en effectuant une itération sur league.items()
:
for team, runs in league.items():
runs_scored, runs_allowed = map(float, runs)
Vous pouvez même effectuer le décompactage de votre tuple en effectuant une itération:
for team, (runs_scored, runs_allowed) in league.items():
runs_scored = float(runs_scored)
runs_allowed = float(runs_allowed)
Vous pouvez aussi très facilement parcourir 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)
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
Les objets du dictionnaire vous permettent de parcourir leurs éléments. De plus, avec la recherche 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 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
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]]