2016-11-10 69 views
0

我是python和Json的新手,我有一個關於從JSON文件獲取值的問題。如何從Python的Json Feed打印Json對象?

比方說,我有水果JSON飼料,如下面的一個:具有維生素元素「C」

{ 
    "Banana": { 
    Vitamin: "A", 
}, 
"Apple": { 
    Vitamin: "B", 
}, 
"Orange": { 
    Vitamin: "C", 
    }, 
} 

比方說,我要打印的對象(在這種情況下,水果)

我使用加載JSON文件:

import utils 
    fruits= utils.load_json('feed.json') 

,我存儲維生素元件在一個變量中,像這樣:

 for fruit in fruits: 
      list_of_vitamins= fruits[fruit]['Vitamin'] 

我if語句使用,看看是否「C」中的維生素的列表可以,它是:

 if ("C" in list_of_vitamins): 
      print "yes" 

這是工作正常,但現在我想找到就看到如果存在「C」,並且如果存在,則打印容納「C」的對象,在這種情況下,「橙色

因此,最終我只想要代碼搜索JSON文件中的維生素C並打印水果橙。

回答

0

你只需要建立一個 「反向」 樹:

from collections import defaultdict 

fruits_by_vitamin = defaultdict(list) # if a key doesn't exist, set it to an 
             # empty list 

for fruit,data in fruits.items(): # on Python2, use iteritems() 
    fruits_by_vitamin[data['Vitamin']].append(fruit) 

print(fruits_by_vitamin['C']) 
+0

感謝@Burhan哈立德你的答案。我有個問題。什麼是defaultdict(列表)中的列表?另外,我不明白for循環。你能解釋一下嗎?非常感謝:) –

+0

'defaultdict'是一種爲字典設置默認值的方法,如果一個鍵不存在的話。在這個例子中,我爲任何不存在列表的鍵設置了默認值。 for循環與您的循環一樣,除了循環使用鍵之外,您還在同一時間循環鍵_和該鍵的值。這就是'.items()'所做的。 –

0
aDict=json.loads("your json content") 
for k,v in aDict.iteritems(): 
    #print '%s:%s' % (k, v) 
    if v['Vitamin']='C': 
     print k 
1
import json 

fruits_json= json.load(open('feed.json')) 
print fruits_json 

for fruit in fruits_json: 
    if fruits_json[fruit]["Vitamin"] == "C": 
    print fruit 
+0

這工作完美!非常感謝:) –

+0

沒問題!如果它能夠工作,你可以升級並接受它! –

+0

當然!我怎樣才能做到這一點?我在這裏相對較新:) –