2015-07-10 69 views
2

我有如下所示的JSON文件。我对编程非常陌生,经过大量的试验和错误之后,我能够通过文件中的索引来访问各个键值,如下面的代码所示。我希望能够通过多个对象按键搜索。例如,我想通过关键“vedette”进行搜索并返回“法语学院”,“Quai conti”,“Institut”,“Les quarante”。任何有关如何做到这一点的建议都会很棒。访问json键值,用python键值索引

with open('DESformatted.json') as data_file:  
    d = json.load(data_file) 
pprint (d['DES'][0]['vedette']) 

[u'Acad\xe9mie fran\xe7aise'] 

{ 
    "DES": [ 
     { 
      "vedette": ["Académie française"], 
      "synonymes": [ 
       "Institut", 
       "Quai Conti", 
       "les Quarante" 
      ], 
      "liste10": [ 
       "Institut", 
       "66", 
       "Quai Conti", 
       "66", 
       "les Quarante", 
       "66" 
      ], 
      "cliques": [ 
       [ 
        "Académie française", 
        "Institut" 
       ], 
       [ 
        "Académie française", 
        "Quai Conti" 
       ], 
       [ 
        "Académie française", 
        "les Quarante" 
       ] 
      ] 
     }, 
     { 
      "vedette": ["Quai Conti"], 
      "synonymes": [ 
       "Académie française" 
      ], 
      "liste10": [ 
       "Académie française", 
       "200" 
      ], 
      "cliques": [ 
       [ 
        "Académie française", 
        "Quai Conti" 
       ] 
      ] 
     }, 
     { 
      "vedette": ["les Quarante"], 
      "synonymes": [ 
       "Académie française" 
      ], 
      "liste10": [ 
       "Académie française", 
       "200" 
      ], 
      "cliques": [ 
       [ 
        "Académie française", 
        "les Quarante" 
       ] 
      ] 
     }, 
     { 
      "vedette": ["Institut"], 
      "synonymes": [ 
       "Académie française", 
       "académie" 
      ], 
      "liste10": [ 
       "Académie française", 
       "100", 
       "académie", 
       "100" 
      ], 
      "cliques": [ 
       [ 
        "Académie française", 
        "Institut" 
       ], 
       [ 
        "Institut", 
        "académie" 
       ] 
      ] 
     } 
    ] 
} 
+0

“*我对编程非常陌生*” - 我可以建议您暂停您正在编写的任何内容并阅读[The Python Tutorial](https://docs.python.org/2/教程/ index.html的)?现在花时间为你节省时间和挫折。 –

回答

0

"DES"关联的值是对象的列表,这样你就可以遍历虽然他们是这样的:

for obj in d["DES"]: 
    print(obj["vedette"]) 

输出:

['Acad\xe9mie fran\xe7aise'] 
['Quai Conti'] 
['les Quarante'] 
['Institut'] 
0

你可以这样做:

>>> vedettes = [] 

>>> for x in d['DES']: 
    vedettes += x['vedette'] 

>>> vedettes 
['Acad\xc3\xa9mie fran\xc3\xa7aise', 'Quai Conti', 'les Quarante', 'Institut'] 

在这里,我正在遍历DES字典的所有值d的键值。然后,我将从每次迭代获得的vedette的值存储到vedettes列表中。通过添加获得的vedette列表和vedettes列表以使得在每个步骤中获得的vedette列表的所有元素被添加到最终的vedettes列表中。

vedettes列表包含您所需的输出。

0

作为其他人出席的正确for循环的替代方案,您可以使用list comprehension

>>> import json 
>>> d = json.load(open('DESformatted.json')) 
>>> [x['vedette'] for x in d['DES']] 
[[u'Acad\xe9mie fran\xe7aise'], [u'Quai Conti'], [u'les Quarante'], [u'Institut']] 
>>>