繁体   English   中英

访问JSON密钥,通过密钥的python值而不是索引

[英]Accessing json key, value with python by key not index

我有下面显示的JSON文件。 我对编程非常陌生,经过反复试验,我能够按文件中的索引访问单个键值,如下面的代码所示。 我希望能够通过键搜索多个对象。 例如,我想通过键“ vedette”进行搜索,并返回“ academieFrançaise”,“ Quai conti”,“ Institut”,“ Les quarante”。 关于如何做到这一点的任何建议都将是很棒的。

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"
                ]
            ]
        }
    ]
}

"DES"关联的值是一个对象列表,因此您可以像这样遍历它们:

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

输出:

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

您可以执行以下操作:

>>> vedettes = []

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

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

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

vedettes列表包含您想要的输出。

作为其他人提出的正确的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']]
>>> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM