向python字典中的键添加和访问值
我正在编写一个python脚本,它从.txt文件中的一个句子中读取玩家的名字和统计信息,然后在字典中更新他们的统计信息,然后打印出他们的平均统计信息。我很难给同一个“玩家”键分配多个值,也很难用下面的逻辑来正确更新玩家的统计数据。团体部分也给我带来了麻烦。我该怎么做向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
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的索引来修改这些值。另外,我刚刚意识到我搞错了,元组是不可变的,所以你必须使用列表来修改成员。或者使用嵌套字典方法。您能用此代码编辑您的原始帖子吗?这是非常重要的