2014-10-06 53 views
0

我正在寫一個python腳本,它從.txt文件中的句子中讀取球員姓名和統計數據,然後更新字典中的統計數據,然後打印出他們的平均統計數據。我在將多個值分配給同一個「玩家」鍵時遇到了問題,並且在下面的邏輯中正確更新了玩家統計信息。 .group部分也給我帶來麻煩。我怎樣才能做到這一點?在python字典中添加和訪問鍵值

import re, sys, os, math 

if len(sys.argv) < 2: 
    sys.exit("Usage: %s filename" % sys.argv[0]) 

filename = sys.argv[1] 

if not os.path.exists(filename): 
    sys.exit("Error: File '%s' not found" % sys.argv[1]) 

line_regex = re.compile(r"^(\w+ \w+) batted (\d+) times with (\d+) hits and (\d+) runs") 
line = [line.strip() for line in open(filename)] 

f = open (filename) 

playerStats = {'players': [0, 0, 0]} 

for players in playerStats: 
    player = line.group(1) 
    atBat = line.group(2) 
    hit = line.group(3) 

    if player in playerStats: 
      playerStats[player][0] += atBat 
      playerStats[player][1] += hit 

    if player not in players: 
     player = line.group(1) 
     playerStats[player][0] = atBat 
     playerStats[player][1] = hit 
     avgs = 0 

    else: 
     playerStats[player][0] = player 
     playerStats[player][0] = atBat 
     playerStats[player][1] = hit 
     playerStats[player][2] = 0 

for player in players: 
    avgs[player] = round(float(hits[player])/float(atBats[player]), 3) 

print "%s: %.3f" % (player, avgs[player]) 

回溯(最近通話最後一個): 文件 「ba.py」 19行,在 玩家= line.group(1) AttributeError的: '名單' 對象有沒有屬性 '組'

回答

3

你應該改變這種

playerStats = {'players': hits, atBats, avgs} 

playerStats = {'players': [0, 0, 0]} 

後者將該值存儲爲list,前者不是有效的Python語法。

要修改這些值,你會做的一個,例如

playerStats[player][1] = 5 # atBat value 

你也可以更改爲嵌套結構像

playerStats = {'players': {'hits' : 0, 
          'atBats' : 0, 
          'avgs' : 0)} 

然後,你可以修改的值作爲

playerStats[player]['hits'] = 3 
+0

更改爲元組修復了語法錯誤,謝謝!現在它說hit,atBats和avgs不是在元組中定義的,但是我在那裏創建了它們,然後再定義它們吧?我該如何解決 – 2014-10-06 13:05:04

+1

你將初始化爲'playerStats = {'players':[0,0,0]}',然後使用像'playerStats [player] [0] + = 3'這樣的索引來修改這些值。另外,我剛剛意識到我是愚蠢的,元組是不可變的,所以你必須使用'list'來修改成員。或者使用嵌套字典方法。 – CoryKramer 2014-10-06 13:07:43

+0

您能否使用此代碼編輯原始帖子?閱讀註釋部分中的代碼非常困難,所有的格式都會丟失。 – CoryKramer 2014-10-06 13:21:21