2014-02-06 85 views
3

我得到了實現此代碼我需要:如何從Python中的json文件獲取字典?

import json 

json_data = [] 
with open("trendingtopics.json") as json_file: 
    json_data = json.load(json_file) 

for category in json_data: 
    print category 
    for trendingtopic in category: 
     print trendingtopic 

,這是我的JSON文件:

{ 
    "General": ["EPN","Peña Nieto", "México","PresidenciaMX"], 
    "Acciones politicas": ["Reforma Fiscal", "Reforma Energética"] 
} 

但是我得到這個印刷:

Acciones politicas 
A 
c 
c 
i 
o 
n 
e 
s 

p 
o 
l 
i 
t 
i 
c 
a 
s 
General 
G 
e 
n 
e 
r 
a 
l 

我想得到一個字典正在按鍵並獲得一個列表作爲值。然後遍歷它。我怎樣才能做到這一點?

+1

您的意思是「爲趨勢json_data [category]中的主題:'在你的內部循環中? –

回答

4

json_data是一本字典。在你的第一個循環,你遍歷字典的鍵列表:

for category in json_data: 

將包含關鍵字符串 - 通用和Acciones politicas。

您需要更換這個循環,遍歷鍵的字母:

for trendingtopic in category: 

與以下,以便它遍歷字典元素:

for trendingtopic in json_data[category]: 
+1

或者,您可以像這樣進行迭代:'for key,json_data.iteritems()中的值:print key;對於價值物品:print item' – hughdbrown

3

我會使用.iteritems()返回鍵/值對的字典的方法:

for category, trending in json_data.iteritems(): 
    print category 
    for topic in trending: 
     print topic 
+0

'iteritems'是否意味着對簡單循環的操作有更高或更低的成本? – diegoaguilar

+0

我認爲'for ... in mydict:'('simple loop')相當於'for ... in mydict.iterkeys():'。當你使用'iteritems()'時,我猜它會快一點點,因爲它會將鍵/值對作爲一個單位來抽取,而不必返回查找任何值。我的動機就是讓代碼看起來更好一點。 –

+0

好極了,如果我的json得到的結構不同,會發生什麼,例如,somtimes值是列表,有時候還有其他字典等 – diegoaguilar