Praca w Pythonie 2.7. Mam słownik z nazwami drużyn jako kluczami i liczbą punktów zdobytych i dozwolonych dla każdej drużyny jako listę wartości:
NL_East = {'Phillies': [645, 469], 'Braves': [599, 548], 'Mets': [653, 672]}
Chciałbym móc wprowadzić słownik do funkcji i iterować po każdym zespole (klawiszach).
Oto kod, którego używam. W tej chwili mogę grać tylko w drużynie. W jaki sposób mógłbym iterować po każdej drużynie i wydrukować oczekiwany procent procentowy dla każdej drużyny?
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
Dzięki za wszelką pomoc.
Możesz również bardzo łatwo iterować po słownikach:
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)
źródło
Słowniki mają wbudowaną funkcję o nazwie
iterkeys()
.Próbować:
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
źródło
Obiekty słownika pozwalają na iterację po ich elementach. Ponadto dzięki dopasowaniu wzorca i podziałowi od
__future__
ciebie możesz trochę uprościć.Wreszcie, możesz oddzielić logikę od drukowania, aby nieco ułatwić późniejszą refaktoryzację / debugowanie.
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
źródło
Zrozumienie listy może skrócić rzeczy ...
win_percentages = [m**2.0 / (m**2.0 + n**2.0) * 100 for m, n in [a[i] for i in NL_East]]
źródło