我试图一次又一次地使用sum函数,但始终收到错误消息。我写了以下代码:
averages["averages_home_goals"] = sum(d['home_goals'] for d in averages.values() if d)
averages["averages_away_goals"] = sum(d['away_goals'] for d in averages.values() if d)
averages["averages_home_conceded"] = sum(d['home_conceded'] for d in averages.values() if d)
averages["averages_away_conceded"] = sum(d['away_conceded'] for d in averages.values() if d)
print(averages)
Run Code Online (Sandbox Code Playgroud)
averages变量如下所示:
{
'Belconnen%20United': {
'home_goals': 4.0,
'away_goals': 1.0,
'home_conceded': 0.0,
'away_conceded': 2.1666666666666665,
},
'Canberra%20FC': {
'home_goals': 1.75,
'away_goals': 1.8,
'home_conceded': 2.0,
'away_conceded': 2.0,
},
# More data of a similar structure
}
Run Code Online (Sandbox Code Playgroud)
运行此命令时,出现以下错误:
TypeError: 'float' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
奇怪的是;当我只运行这4行中的一行时,代码可以正常执行(无论哪一行都行)。执行averages["averages_away_goals"] = ...语句时出现错误
有人可以帮我吗?给变量d另一个名称也不起作用
第一行可以正常工作,但是失败将从第二行开始并继续。原因是您averages在第一行之后的词典中包含了一个新条目。因此,您的averages字典具有一个"averages_home_goals"带有单个浮点值的新键。
当您执行第二行时,您将遍历字典的所有值,该字典averages现在具有key中所有本位目标总和的附加值"averages_home_goals",这将是一个浮点数。而且您不能下标浮点数。基本上,这意味着您试图执行以下类型的代码示例(在第二行):
12.3242["away_goals"]
Run Code Online (Sandbox Code Playgroud)
这将永远失败。
作为解决方案,我建议将结果存储到新字典中,例如
res = {}
res["averages_home_goals"] = sum(d['home_goals'] for d in averages.values() if d)
res["averages_away_goals"] = sum(d['away_goals'] for d in averages.values() if d)
res["averages_home_conceded"] = sum(d['home_conceded'] for d in averages.values() if d)
res["averages_away_conceded"] = sum(d['away_conceded'] for d in averages.values() if d)
print(res)
Run Code Online (Sandbox Code Playgroud)