如何通过标签Value遍历给定的JSON文件数据

时间:2019-05-01 05:36:42

标签: python json

我想知道如何通过在内部字典中传递标记键的值来遍历json文件。 例如,如果我通过了90年代,它将返回电影名称和列表中包含90年代的标签值。 请在下面找到json示例

{ "items": [
 {"name": "The Shawshank Redemption", "tags": ["90s", "drama"]},
 {"name": "The Godfather", "tags": ["70s", "drama", "crime"]},
 {"name": "The Dark Knight", "tags": ["action", "crime", "drama"]},
 {"name": "The Godfather: Part II", "tags": ["70s", "crime", "drama"]},
 ...]

}

如果我搜索90年代,戏剧,犯罪或电影名称,我希望它应该返回标签列表或电影名称中包含这些值之一的相应词典

2 个答案:

答案 0 :(得分:0)

这是一个返回包含指定标签的所有电影的列表的函数:

import json

jsondata = """ { "items": [ {"name": "The Shawshank Redemption", "tags": ["90s", "drama"]},
 {"name": "The Godfather", "tags": ["70s", "drama", "crime"]},
 {"name": "The Dark Knight", "tags": ["action", "crime", "drama"]},
 {"name": "The Godfather: Part II", "tags": ["70s", "crime", "drama"]}
]}"""

data = json.loads(jsondata)


def findMoviesByTag(tag):
    r = []
    for item in data['items']:
        if tag in item['tags']:
            r.append(item)
    return r

result = findMoviesByTag("90s")
if len(result) == 0:
    print("no matches")
else:
    print(result)

结果:

[{'name': 'The Shawshank Redemption', 'tags': ['90s', 'drama']}]

或:

print(findMoviesByTag("70s"))

结果:

[{'name': 'The Godfather', 'tags': ['70s', 'drama', 'crime']}, {'name': 'The Godfather: Part II', 'tags': ['70s', 'crime', 'drama']}]

答案 1 :(得分:0)

您可以使用列表理解来查找带有特定标签的所有电影。

data = { "items": [
 {"name": "The Shawshank Redemption", "tags": ["90s", "drama"]},
 {"name": "The Godfather", "tags": ["70s", "drama", "crime"]},
 {"name": "The Dark Knight", "tags": ["action", "crime", "drama"]},
 {"name": "The Godfather: Part II", "tags": ["70s", "crime", "drama"]},
]}

def find_movies_by_tag(tag):

    #Get all dictionaries, for which the tag matches a tag in value list for tags
    return [item for item in data['items'] if tag in item.get('tags')]

print(find_movies_by_tag('drama'))
print(find_movies_by_tag('crime'))
print(find_movies_by_tag('70s'))

输出将是:

print(find_movies_by_tag('drama'))
#[{'name': 'The Shawshank Redemption', 'tags': ['90s', 'drama']}, {'name': 'The Godfather', 'tags': ['70s', 'drama', 'crime']}, {'name': 'The Dark Knight', 'tags': ['action', 'crime', 'drama']}, {'name': 'The Godfather: Part II', 'tags': ['70s', 'crime', 'drama']}]

print(find_movies_by_tag('crime'))
#[{'name': 'The Godfather', 'tags': ['70s', 'drama', 'crime']}, {'name': 'The Dark Knight', 'tags': ['action', 'crime', 'drama']}, {'name': 'The Godfather: Part II', 'tags': ['70s', 'crime', 'drama']}]

print(find_movies_by_tag('70s'))
#[{'name': 'The Godfather', 'tags': ['70s', 'drama', 'crime']}, {'name': 'The Godfather: Part II', 'tags': ['70s', 'crime', 'drama']}]