我是Python的新手(上周),已达到我的极限。花了三天时间,我的大部分时间都在stackoverflow中,但我无法解决如何进一步发展!
Json有多个嵌套数组。它可能包含三个(如下例所示(json.txt))或30.我需要循环遍历每个,然后深入到'局'并最终获得'wickets'的值。这是我感到困惑的最后一步。有人可以建议吗?
你完全绝望了
威尔
import os, json,requests
print 'Starting'
url = 'https://dl.dropboxusercontent.com/u/3758695/json.txt'
# download the json string
json_string = requests.get(url)
print 'Downloaded json'
# get the content
the_data = json_string.json()
print 'the_data has length ', len(the_data)
for index in range(len(the_data)):
print 'Now working on index ', index
for wicket in the_data[index]:
print 'wicket equals ',wicket
# OK - I can see Innings. Now, how do I get inside
# and obtain 'wickets'?
答案 0 :(得分:4)
首先,不要使用索引,而是直接在列表中循环 ;这样你就可以给他们有意义的名字。顶级是一个条目列表,每个条目都是一个带有'innings'
密钥的字典,每个innings
是一个字典列表,其中包括wickets
密钥:
for entry in data:
for inning in entry['innings']:
print inning['wickets']
打印:
>>> for entry in data:
... for inning in entry['innings']:
... print inning['wickets']
...
10
9
0
0
这样也可以更轻松地在每个级别添加信息:
>>> for entry in data:
... print entry['description']
... for i, inning in enumerate(entry['innings']):
... print 'Innings {}: {} wickets'.format(i + 1, inning['wickets'])
...
Rest of Sri Lanka v Sri Lanka A at Pallekele, May 14, 2013
Innings 1: 10 wickets
Innings 2: 9 wickets
63rd match: Royal Challengers Bangalore v Kings XI Punjab at Bangalore, May 14, 2013
Innings 1: 0 wickets
Innings 2: 0 wickets
64th match: Chennai Super Kings v Delhi Daredevils at Chennai, May 14, 2013
答案 1 :(得分:0)
import os, json,requests
print 'Starting'
url = 'https://dl.dropboxusercontent.com/u/3758695/json.txt'
# download the json string
json_string = requests.get(url)
print 'Downloaded json'
# get the content
the_data = json_string.json()
print 'the_data has length ', len(the_data)
for index in range(len(the_data)):
print 'Now working on index ', index
for d in the_data[index]['innings']:
print d['wickets']
答案 2 :(得分:0)
它看起来很难看,但是你可以对它进行改进,但是这里列出了Dict和List的混合任意深度:
import os, json,requests
print 'Starting'
url = 'https://dl.dropboxusercontent.com/u/3758695/json.txt'
# download the json string
json_string = requests.get(url)
print 'Downloaded json'
def dig_down(partial_json_list, depth):
if type(partial_json_list) is list:
for i in range(len(partial_json_list)):
print 'index', i, ' at depth', depth,' has', len(partial_json_list[i]) , 'elements'
if len(partial_json_list[i]) > 1:
dig_down(partial_json_list[i],depth+1)
else:
for k in partial_json_list:
print 'item at depth', depth, 'equals', k#, ' & has', len(partial_json_list[k]) , 'elements'
if type(partial_json_list) is list or type(partial_json_list) is dict:
try:
if len(partial_json_list[k]) > 1:
dig_down(partial_json_list[k],depth+1)
except:
pass
else:
print partial_json_list[k]
# get the content
the_data = json_string.json()
print 'the_data has length ', len(the_data)
dig_down(the_data,0)