2013-07-10 212 views
0

我正在使用Twitch API,并且我有一个大型嵌套字典。我如何筛选它?Python通过嵌套字典排序

>>> 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是从打印r.text不同?

我如何通过字典来获取我要查找的信息? 我目前想:

>>> r.text[stream] 
NameError: name 'stream' is not defined 

感谢

回答

1

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

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

查看Ashwini的答案,为什么print r.textr.text是不同的。

+0

谢谢你的解释。我现在需要去了解json :) – IdeoREX

+0

Python的json库非常有用:http://docs.python.org/2/library/json.html – Brien

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'}} 
+0

感谢您的解释。你知道如何访问数据吗? – IdeoREX

+0

@IdeoREX使用'r.text [“stream”]' –