我只有几天的Python体验,所以我很抱歉用一个婴儿步骤问题来污染网站。 我正在尝试为XBMC编写一个附加组件,我相信它使用的是Python 2.4。我已经访问了一个web api,它以JSON包装了返回。我已将url返回保存到WebHTML列表中(我认为是列表!)。当我从stackoverflow教程中输入以下内容时:
decoded = json.loads(WebHTML)
print 'DECODED:', decoded
我在日志中收到以下内容:
NOTICE: {u'totalItems': 1, u'query': u'Ludwig van Beethoven Op 67 Symphony No 5 in Cm (Fate)', u'kind': u'volumes#volumes', u'items': [{u'scoreId': u'IMSLP01056', u'pageCount': 42, u'title': u'Symphony No.5, Op.67 - Complete Score (S.464/5)', u'kind': u'volumes#volume', u'authors': [u'Beethoven, Ludwig van'], u'year': 1807, u'selfLink': u'http://www.peachnote.com/rest/api/v0/score?id=IMSLP01056'}]}
我想为随后的网址调用提取scoreId,即IMSLP01056,但我正在努力使用正确的命令。当我尝试:
dict = json.loads(WebHTML)
dict['items']['scoreId']
print dict['items']['scoreId']
返回的日志错误是:
TypeError:list indices必须是整数,而不是str
如果我尝试:
print dict[4][1]
它返回
KeyError: (4,)
我已尝试过各种JSONloads命令但无法正常工作。我总是遇到错误:
IOError: (2, 'No such file or directory', '{\n "kind": "volumes#volumes",\n "query": "Ludwig ..... etc, etc.
所以,对于我应该使用的正确命令,我有点难过。如果这是一个非常基本的问题的信息太多,感谢和抱歉。
答案 0 :(得分:2)
您获得的主要响应确实是字典,但其items
键的值是一个列表。所以错误告诉你使用整数索引进行内部查找。所以:
dict['items'][0]['scoreId']
请注意,items
列表中可能包含许多项目,而上述内容仅为您提供第一项:您可能希望将所有项目都放在一个列表中:
scores = [item['scoreId'] for item in dict['items']]
将迭代所有项目,并将其分数提取到单独的列表中。
此外,正如larsmans所说,不要使用dict
(或list
)作为变量名称,因为它会隐藏内置的dict()
函数。