Pythonのリストに対応する辞書のキー値の反復


132

Python 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()もPython 3で削除されました。代わりにdict.keys()を使用してください
Nerrve

1
dict.itervalues()もPython 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 '14

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.