向python字典中的键添加和访问值

向python字典中的键添加和访问值,python,dictionary,Python,Dictionary,我正在编写一个python脚本,它从.txt文件中的一个句子中读取玩家的名字和统计信息,然后在字典中更新他们的统计信息,然后打印出他们的平均统计信息。我很难给同一个“玩家”键分配多个值,也很难用下面的逻辑来正确更新玩家的统计数据。团体部分也给我带来了麻烦。我该怎么做 import re, sys, os, math if len(sys.argv) < 2: sys.exit("Usage: %s filename" % sys.argv[0]) filename = sy

我正在编写一个python脚本,它从.txt文件中的一个句子中读取玩家的名字和统计信息,然后在字典中更新他们的统计信息,然后打印出他们的平均统计信息。我很难给同一个“玩家”键分配多个值,也很难用下面的逻辑来正确更新玩家的统计数据。团体部分也给我带来了麻烦。我该怎么做

  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])
导入re、系统、操作系统、数学 如果len(系统argv)<2: sys.exit(“用法:%s文件名”%sys.argv[0]) filename=sys.argv[1] 如果不存在os.path.exists(文件名): sys.exit(“错误:找不到文件“%s”%sys.argv[1]) 行_regex=re.compile(r“^(\w+\w+)击球(\d+)次,命中(\d+)次,运行(\d+)次”) line=[line.strip()用于打开的行(文件名)] f=打开(文件名) playerStats={'players':[0,0,0]} 对于playerStats中的玩家: 玩家=线路组(1) atBat=直线组(2) hit=行。组(3) 如果玩家在playerStats中: 玩家状态[玩家][0]+=atBat 玩家状态[玩家][1]+=命中率 如果玩家不在玩家中: 玩家=线路组(1) playerStats[player][0]=atBat playerStats[player][1]=命中率 平均值=0 其他: playerStats[player][0]=玩家 playerStats[player][0]=atBat playerStats[player][1]=命中率 playerStats[player][2]=0 对于玩家中的玩家: 平均值[玩家]=回合(浮动(击数[玩家])/浮动(击数[玩家]),3) 打印“%s:%.3f”%(播放器,平均值[播放器]) 回溯(最近一次呼叫最后一次): 文件“ba.py”,第19行,在 玩家=线路组(1) AttributeError:“list”对象没有属性“group”

您应该更改此属性

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

后者将值存储为
列表
,前者不是有效的Python语法

例如,要修改其中一个值,可以执行以下操作:

playerStats[player][1] = 5   # atBat value
您还可以更改为嵌套结构,如

playerStats = {'players': {'hits' : 0,
                           'atBats' : 0,
                           'avgs' : 0)}
然后您可以根据需要修改这些值

playerStats[player]['hits'] = 3
你应该改变这个

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

后者将值存储为
列表
,前者不是有效的Python语法

例如,要修改其中一个值,可以执行以下操作:

playerStats[player][1] = 5   # atBat value
您还可以更改为嵌套结构,如

playerStats = {'players': {'hits' : 0,
                           'atBats' : 0,
                           'avgs' : 0)}
然后您可以根据需要修改这些值

playerStats[player]['hits'] = 3
你应该改变这个

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

后者将值存储为
列表
,前者不是有效的Python语法

例如,要修改其中一个值,可以执行以下操作:

playerStats[player][1] = 5   # atBat value
您还可以更改为嵌套结构,如

playerStats = {'players': {'hits' : 0,
                           'atBats' : 0,
                           'avgs' : 0)}
然后您可以根据需要修改这些值

playerStats[player]['hits'] = 3
你应该改变这个

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

后者将值存储为
列表
,前者不是有效的Python语法

例如,要修改其中一个值,可以执行以下操作:

playerStats[player][1] = 5   # atBat value
您还可以更改为嵌套结构,如

playerStats = {'players': {'hits' : 0,
                           'atBats' : 0,
                           'avgs' : 0)}
然后您可以根据需要修改这些值

playerStats[player]['hits'] = 3

更改为元组修复了语法错误,谢谢!现在它说hits、atBats和AVG没有在元组中定义,但我在元组中创建它们,然后在后面定义它们,对吗?我怎样才能避免您将其初始化为
playerStats={'players':[0,0]}
,然后您使用类似
playerStats[player][0]+=3的索引来修改这些值。另外,我刚刚意识到我搞错了,元组是不可变的,所以你必须使用
列表来修改成员。或者使用嵌套字典方法。您能用此代码编辑您的原始帖子吗?在注释部分阅读代码非常困难,所有格式都丢失了。我在顶部编辑了它。运行脚本时获取“atBats未定义”好的,我看到问题了,将该行更改为
playerStats={'players':[0,0]}
更改为tuple修复了语法错误,谢谢!现在它说hits、atBats和AVG没有在元组中定义,但我在元组中创建它们,然后在后面定义它们,对吗?我怎样才能避免您将其初始化为
playerStats={'players':[0,0]}
,然后您使用类似
playerStats[player][0]+=3的索引来修改这些值。另外,我刚刚意识到我搞错了,元组是不可变的,所以你必须使用
列表来修改成员。或者使用嵌套字典方法。您能用此代码编辑您的原始帖子吗?在注释部分阅读代码非常困难,所有格式都丢失了。我在顶部编辑了它。运行脚本时获取“atBats未定义”好的,我看到问题了,将该行更改为
playerStats={'players':[0,0]}
更改为tuple修复了语法错误,谢谢!现在它说hits、atBats和AVG没有在元组中定义,但我在元组中创建它们,然后在后面定义它们,对吗?我怎样才能避免您将其初始化为
playerStats={'players':[0,0]}
,然后您使用类似
playerStats[player][0]+=3的索引来修改这些值。另外,我刚刚意识到我搞错了,元组是不可变的,所以你必须使用
列表来修改成员。或者使用嵌套字典方法。您能用此代码编辑您的原始帖子吗?在注释部分阅读代码非常困难,所有格式都丢失了。我在顶部编辑了它。运行脚本时获取“atBats未定义”好的,我看到问题了,将该行更改为
playerStats={'players':[0,0]}
更改为tuple修复了语法错误,谢谢!现在它说hits、atBats和AVG没有在元组中定义,但我在元组中创建它们,然后在后面定义它们,对吗?我怎样才能避免您将其初始化为
playerStats={'players':[0,0]}
,然后您使用类似
playerStats[player][0]+=3的索引来修改这些值。另外,我刚刚意识到我搞错了,元组是不可变的,所以你必须使用
列表来修改成员。或者使用嵌套字典方法。您能用此代码编辑您的原始帖子吗?这是非常重要的