파이썬에서 나열하는 사전 키 값에 대한 반복


132

파이썬에서 작업하기 2.7. 팀 이름을 키로 사용하는 사전과 점수를 매기고 각 팀에 대해 값 목록으로 허용 한 런의 양이 있습니다.

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

사전을 함수에 공급하고 각 팀 (키)을 반복하고 싶습니다.

사용중인 코드는 다음과 같습니다. 지금은 팀 단위로만 갈 수 있습니다. 각 팀을 어떻게 반복하고 각 팀의 예상 win_percentage를 인쇄합니까?

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

도움을 주셔서 감사합니다.

답변:


221

사전을 반복 할 수있는 몇 가지 옵션이 있습니다.

사전 자체 ( for team in league) 를 반복하면 사전 의 키를 반복하게됩니다. for 루프를 사용하여 루핑 할 때 dict ( league) 자체 를 반복 하거나 league.keys()다음 과 같이 동작은 동일합니다 .

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

다음을 반복하여 키와 값을 한 번에 반복 할 수도 있습니다 league.items().

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

반복하는 동안 튜플 포장 풀기를 수행 할 수도 있습니다.

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

43
dict.iteritems ()는 Python3부터 제거되었습니다. 대신 dict.items ()를 사용해야합니다
Sergey

14
dict.iterkeys ()도 파이썬 3에서 제거되었습니다. 대신 dict.keys ()를 사용해야합니다
Nerrve

1
dict.itervalues ​​()도 파이썬 3에서 제거되었습니다. 대신 dict.values ​​()를 사용해야합니다
Zachary Ryan Smith

11

사전을 매우 쉽게 반복 할 수 있습니다.

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 : 답변이 가치 있다고 생각 될 때마다 의견을 올리십시오 (게시물 왼쪽에있는 "위"버튼을 클릭하십시오). 그렇게하면 당신도 지역 사회를 돕고 있습니다!
StackExchange saddens dancek

6

사전에는이라는 내장 함수가 iterkeys()있습니다.

시험:

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

사전 개체를 사용하면 해당 항목을 반복 할 수 있습니다. 또한 패턴 일치와 나눗셈을 사용 __future__하면 약간 단순화 할 수 있습니다.

마지막으로 논리를 인쇄와 분리하여 나중에 리팩토링 / 디버그를보다 쉽게 ​​수행 할 수 있습니다.

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

목록 이해는 일을 단축시킬 수 있습니다 ...

win_percentages = [m**2.0 / (m**2.0 + n**2.0) * 100 for m, n in [a[i] for i in NL_East]]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.