Python 从JSON文件获取值
我试图从count中获取值,并将它们相加以求出总和。 我写的代码是:Python 从JSON文件获取值,python,json,Python,Json,我试图从count中获取值,并将它们相加以求出总和。 我写的代码是: import json data= ''' { "note":" sample data ", "comments": [ { "School":"UCLA", "count":97 }, { "School":"MIT", "count":97 }, { "School":"Rutgers", "cou
import json
data= '''
{
"note":" sample data ",
"comments":
[
{
"School":"UCLA",
"count":97
},
{
"School":"MIT",
"count":97
},
{
"School":"Rutgers",
"count":90
}
]
}'''
number=list()
a=0
b=0
info = json.loads (data)
print json.dumps(info, indent=4)
for i in info:
number= i["comments"][0]["count"]
for n in number:
a=float(n)
b+=a
print b
当我执行此操作时,我得到的输出是:
Traceback (most recent call last):
File "testty.py", line 28, in <module>
number= i["comments"][0]["count"]
TypeError: string indices must be integers
回溯(最近一次呼叫最后一次):
文件“testty.py”,第28行,在
编号=i[“注释”][0][“计数”]
TypeError:字符串索引必须是整数
有人能告诉我我做错了什么,以及如何修复它吗
谢谢这:
在dict上迭代,从而生成键,这些键是字符串。直接访问
info
。顶级JSON对象不是数组,因此不应该迭代它。该数组位于info[“comments”]
中,您也可以这样做
for i in info["comments"]:
a = float(i["count"])
b += a
print b
你应该在
info[“comments”]
上循环,这是一个列表。您还可以使用sum
函数对值进行合计
b = sum(float(i["count"]) for i in info["comments"])
这是python列表理解:
tt = sum([float(row['count']) for row in info['comments']])
print tt
或者这是“for”循环
列表理解通常更快
您的代码:
data= '''
[{
"note":" sample data ",
"comments":
[
{
"School":"UCLA",
"count":97
},
{
"School":"MIT",
"count":97
},
{
"School":"Rutgers",
"count":90
}
]
}]'''
使用上面的数据和你的代码应该工作。。。您错过了开头“[”和结尾“]”……谢谢大家,现在可以开始了。但是,如果我想使用步骤:number=I[“comments”][0][“count”]获取值,我应该做什么更改才能使其工作?嗨,Merlin,我正在尝试使用命令:number=I[“comments”][0][“count”]捕获count的值。但是我得到了一个错误:Traceback(最后一次调用):文件“testty.py”,第28行,在number=I[“comments”][0][“count”]TypeError中:字符串索引必须是整数,即使我的代码现在使用@Barmar提到的方法工作,我想知道我应该对上面的命令做什么更改,以便在我的代码中使用它。我只是想了解命令number=I[“comments”][0][“count”]是如何工作的,以及为什么它在这种情况下不工作。谢谢你抽出时间。
tt = []
for row in info['comments']:
tt.append(float(row['count']))
b = sum(tt)
print b
data= '''
[{
"note":" sample data ",
"comments":
[
{
"School":"UCLA",
"count":97
},
{
"School":"MIT",
"count":97
},
{
"School":"Rutgers",
"count":90
}
]
}]'''