2013-07-10 242 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」]' –