2016-11-10 3 views
0

Я новичок в python и Json, и у меня возник вопрос о получении значений из файла JSON.Как вы печатаете Json Object из Json Feed с Python?

Допустим, у меня есть корм JSON для фруктов, таких, как показано ниже:

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

Допустим, я хочу, чтобы напечатать объект (в данном случае плоды), который имеет витамин элемент «C»

Я загрузки файла JSON с помощью:

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

и я храню элемент витамины в переменной следующим образом:

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

Я, если заявление используя, чтобы увидеть, если «C» доступна в списке витаминов и это:

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

Это работает хорошо, но теперь я пытаюсь найти прочь, чтобы увидеть если «C» существует, и если это так, напечатайте объект, который содержит «C», в этом случае «orange»

Так что, в конце концов, я просто хочу, чтобы код искал файл 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 (list)? Кроме того, я не понял цикл 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

Конечно! Как я могу это сделать? Я относительно новый здесь :) –