我正在使用Twitch API,我有一个大型嵌套字典。我该如何筛选它?
>>> r = requests.get('https://api.twitch.tv/kraken/streams/sibstlp', headers={'Accept': 'application/vnd.twitchtv.v2+json'})
然后:
>>> print r.text
#large nested dictionary starting with
#{"stream":{"_links":{"self":"https://api.twitch.tv/kraken/streams/sibstlp"},
有趣的:
>>> r.text
# large nested dictionary starting with
#u'{"stream":{"_links":{"self":"https://api.twitch.tv/kraken/streams/sibstlp"},
有谁知道为什么r.text与print r.text不同?
如何通过字典来获取我正在寻找的信息? 我正在尝试:
>>> r.text[stream]
NameError: name 'stream' is not defined
由于
答案 0 :(得分:1)
print r.text
返回对象的str
版本,而r.text
则返回对象的repr
版本。
>>> x = 'foo'
>>> print x #equivalent to : print str(x)
foo
>>> print str(x)
foo
>>> x #equivalent to : print repr(x)
'foo'
>>> print repr(x)
'foo'
该词典的键是字符串,如果使用r.text[stream]
,则python将查找名为stream
的变量,因为找不到它会引发NameError
。
只需使用:r.text['stream']
<强>演示:强>
>>> d= {"stream":{"_links":{"self":"https://api.twitch.tv/kraken/streams/sibstlp"}}}
>>> d['stream']
{'_links': {'self': 'https://api.twitch.tv/kraken/streams/sibstlp'}}
答案 1 :(得分:1)
首先,您尝试访问字符串中的元素,而不是字典。 r.text
只返回请求的纯文本。要从requests
对象获取正确的字典,请使用r.json()
。
当您尝试r.json()[stream]
时,Python认为您正在查找与变量stream
中的键对应的字典中的值。你没有这样的变数。你想要的是与文字字符串'stream'的键对应的值。因此,r.json()['stream']
应该为您提供下一个嵌套字典。如果你想要那个网址,那么r.json()['stream']['_links']['self']
应该返回它。
请参阅Ashwini的答案,了解print r.text
和r.text
为何不同。