使用Python按键而不是索引来访问json键和值

2024-06-16 11:49:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有如下所示的JSON文件。我对编程非常陌生,在经历了大量的尝试和错误之后,我能够通过文件中的索引访问各个键、值,如下面的代码所示。我希望能够通过关键字搜索多个对象。例如,我想按“vedette”键搜索并返回“academie Franç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"
                ]
            ]
        }
    ]
}

Tags: 文件lesmieacadfranconticliquesquarante
3条回答

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

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

输出:

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

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

你可以这样做:

>>> vedettes = []

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

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

我在这里迭代字典dDES键中的所有值。然后我将从每次迭代中获得的vedette值存储到vedettes列表中。这是通过添加获得的vedette列表和vedettes列表来实现的,这样每个步骤中获得的vedette列表的所有元素都会添加到最终的vedettes列表中。你知道吗

vedettes列表包含所需的输出。你知道吗

相关问题 更多 >