我在文件中有以下json结构:
[
{ "Date": "timevalue", "Org": "b4256282", "Referer": "somevalue" },
{ "Date": "timevalue", "Org": "b4257482", "Referer": "somevalue" },
{ "Date": "timevalue", "Org": "b4253345", "Referer": "somevalue" },
....
]
我想提取所有的组织。
我的代码是:
import json
jdata = json.loads(str_of_above_json)
for orgs in jdata['Org']:
print(orgs)
但是这段代码不起作用......我得到以下错误消息
TypeError:list indices必须是整数,而不是str
有谁能让我知道我做错了什么?
答案 0 :(得分:2)
您需要遍历列表中的每个字典,然后依次使用dict索引来索引dict。对于列表中的每个字典,
Org
相关联的值在代码中,这是
for dict_ in jdata:
org = dict_['Org']
print(org)
但是,我们拥有列表理解的强大功能,因此上面的代码可以更简洁地表示,
jdata = json.loads(str_of_above_json)
orgs = [x['Org'] for x in jdata]
print(orgs)
为什么您当前的代码没有工作?
您执行jdata['Org']
,但[...]
是dict索引操作,这将导致错误,因为jdata
是列表。
答案 1 :(得分:2)
请记住,您的数据作为Python结构加载后将成为字典列表。为了简单起见,它只是:
[{...}, {...}, {...}]
此处的关键字是列表。因此,你的for循环将/应该迭代列表,在每次迭代时为你提供每个字典。
此时,您可以访问'组织'键。
所以当你这样做时:
for orgs in jdata:
print(orgs) # each dictionary
此时,您可以现在访问字典中的Org
键:
for orgs in jdata:
print(orgs) # each dictionary
print(orgs['Org']) # The value of 'Org' in each dictionary
答案 2 :(得分:0)
import json
jdata = json.loads(str_of_above_json)
for orgs in jdata:
print(orgs["Org"])
你需要遍历列表[] 然后打印每个数据的“组织”部分。
答案 3 :(得分:0)
所有其他答案都是正确的,将解决您当前的问题。
但如果您使用这样的结构操作很多,您可能会发现包plucky
有用(完全披露:我是该包的作者)。
例如(假设您的jdata
已加载):
>>> import plucky
>>> plucky.plucks(data, '.Org')
['b4256282', 'b4257482', 'b4253345']
或:
>>> plucky.pluckable(data).Org
['b4256282', 'b4257482', 'b4253345']