การทำซ้ำค่าคีย์พจนานุกรมที่สอดคล้องกับรายการใน 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 loop ลักษณะการทำงานจะเหมือนกันไม่ว่าคุณจะวนซ้ำไปที่ 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)

คุณยังสามารถทำการคลาย tuple ของคุณได้ในขณะที่ทำซ้ำ:

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

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__คุณสามารถทำให้สิ่งต่างๆง่ายขึ้นเล็กน้อย

สุดท้ายคุณสามารถแยกตรรกะของคุณออกจากการพิมพ์ของคุณเพื่อให้ง่ายต่อการ refactor / debug ในภายหลัง

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.