0

我正在使用 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

谢谢

4

2 回答 2

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,因为它没有找到它会 raise 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'}}
于 2013-07-10T18:49:57.553 回答
1

首先,您试图访问字符串中的元素,而不是字典。 r.text只返回请求的纯文本。要从requests对象中获取正确的字典,请使用r.json().

当您尝试时r.json()[stream],Python 认为您正在字典中查找与它们位于 variable 中的键对应的值stream。你没有这样的变量。您想要的是与文字字符串“流”的键对应的值。因此,r.json()['stream']应该给你下一个嵌套字典。如果你想要那个 url,那么r.json()['stream']['_links']['self']应该返回它。

请参阅 Ashwini 的答案,了解为什么print r.textr.text不同。

于 2013-07-10T18:53:12.927 回答