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


132

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.

Risposte:


221

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 looping con un ciclo for, il comportamento sarà lo stesso indipendentemente dal fatto che si esegua il loop su 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 della tupla durante l'iterazione:

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

43
dict.iteritems () è stato rimosso da Python3. Dovresti usare invece dict.items ()
Sergey

14
dict.iterkeys () è stato rimosso anche in Python 3. In alternativa, dovresti usare dict.keys ()
Nerrve

1
dict.itervalues ​​() è stato rimosso anche in Python 3. In alternativa, dovresti usare dict.values ​​()
Zachary Ryan Smith

11

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)

@BurtonGuster: Ogni volta che ritieni che la risposta sia degna, ti preghiamo di votare (fai clic sul pulsante "su" sul lato sinistro del post)! In questo modo stai aiutando anche la community!
StackExchange saddens dancek,

6

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

5

Gli oggetti del dizionario consentono di scorrere i loro elementi. Inoltre, con la corrispondenza dei modelli e la divisione da __future__te 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

4

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]]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.