如何解析来自多个JSON对象的特定键的值

2024-07-03 07:40:15 发布

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

我试图从下面的JSON解析键“标记”

data = [{
    "12233":{
    "title": "The Title",
    "id": "12233",
    "tags": ["tag1", "tag2", "tag3"],
    },
    "122223":{
    "title": "The Title",
    "id": "122223",
    "tags": ["tag4", "tag5", "tag6"],
    },
    "122344":{
    "title": "The Title",
    "id": "122344",
    "tags": ["tag7", "tag8", "tag9"],
    }
}]

我已经试过了

data = data[0]
tags_list = []

for tags in data:
    tags_list.append(tags["122344"])

print(tags_list)

但它只提取第一个对象,我希望结果是这样的

tags_list = ["tag1", "tag2", "tag3", "tag4", "tag5", "tag6","tag7", "tag8", "tag9"]

Tags: theiddatatitletagslisttag1tag2
3条回答

对字典数据[0]的所有值使用itemgetter,并将所有项相加到空列表[]

from operator import itemgetter

data = [{
    "12233":{
    "title": "The Title",
    "id": "12233",
    "tags": ["tag1", "tag2", "tag3"],
    },
    "122223":{
    "title": "The Title",
    "id": "122223",
    "tags": ["tag4", "tag5", "tag6"],
    },
    "122344":{
    "title": "The Title",
    "id": "122344",
    "tags": ["tag7", "tag8", "tag9"],
    }
}]

tag_getter = itemgetter('tags')
# map to get list of all tags
# Adding all the list of tags to []
sum(map(tag_getter, data[0].values()), [])
['tag1', 'tag2', 'tag3', 'tag4', 'tag5', 'tag6', 'tag7', 'tag8', 'tag9']

如果要合并列表所有条目中的所有标记,请使用

from operator import itemgetter
tag_getter = itemgetter('tags')
def all_tags(d):
    return sum(map(tag_getter, d.values()), [])
sum(map(all_tags, data), [])

与单个循环不同,您需要两个循环来迭代内部字典。试试这个:

tags_list = []
for k in data:
    for t in k:
        tags_list.extend(k[t]['tags'])

输出tags_list

['tag1', 'tag2', 'tag3', 'tag4', 'tag5', 'tag6', 'tag7', 'tag8', 'tag9']

这能解决你的问题吗

tags_list = [item for k in data for t in k for item in k[t]['tags']]

相关问题 更多 >