it-swarm.it

Scorrere i valori chiave del dizionario corrispondenti all'elenco in Python

Lavorare in Python 2.7. Ho un dizionario con i nomi delle squadre come chiavi e la quantità di punti segnati e consentiti per ogni squadra come lista valori:

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

Vorrei essere in grado di alimentare il dizionario in una funzione e scorrere su ogni squadra (i tasti).

Ecco il codice che sto usando. In questo momento, posso solo andare squadra per squadra. Come faccio a scorrere su ciascuna squadra e stampare il win_percentage previsto per ogni squadra?

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

Grazie per qualsiasi aiuto.

114
Burton Guster

Sono disponibili diverse opzioni per scorrere su un dizionario.

Se esegui l'iterazione sul dizionario stesso (for team in league), esegui l'iterazione sulle chiavi del dizionario. Quando si esegue il ciclo con un ciclo for, il comportamento sarà lo stesso se si esegue il ciclo sul dict (league) stesso o league.keys() :

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

Puoi anche scorrere contemporaneamente sia le chiavi che i valori ripetendo league.items():

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

Puoi persino eseguire il disimballaggio di Tuple durante l'iterazione:

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

Puoi anche iterare facilmente sui dizionari:

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)
10
dancek

I dizionari hanno una funzione integrata chiamata iterkeys().

Provare:

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
6
HodofHod

Gli oggetti del dizionario consentono di scorrere i loro elementi. Inoltre, con il pattern matching e la divisione da __future__ puoi semplificare un po 'le cose.

Infine, puoi separare la tua logica dalla stampa per rendere le cose un po 'più facili da refactor/debug in seguito.

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
5
Swiss

La comprensione dell'elenco può abbreviare le cose ...

win_percentages = [m**2.0 / (m**2.0 + n**2.0) * 100 for m, n in [a[i] for i in NL_East]]
3
Benjamin