Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从JSON文件获取值_Python_Json - Fatal编程技术网

Python 从JSON文件获取值

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

我试图从count中获取值,并将它们相加以求出总和。 我写的代码是:

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
    }
  ]
}]'''