Python通过嵌套字典排序

时间:2013-07-10 18:46:55

标签: python api dictionary nested nameerror

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

由于

2 个答案:

答案 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.textr.text为何不同。