如何遍历整个JSON文件并将数据提取到变量中

时间:2018-07-27 22:32:17

标签: python json

我正在处理一个python文件,该文件从JSON文件提取电影及其详细信息,然后将数据保存到自定义电影对象。现在,我可以从庞大的列表中选择一部电影。

但是,我希望能够遍历并获得每种体裁,导演,演员并将其添加到单独的数组中。现在,当我尝试执行此操作时,出现此错误:

CombinePerKey

我还想创建一个包含标题,演员,导演和流派的自定义电影对象的数组。

这是我的代码:

{'P1': True, 'P2': True}

这是我的json数据:

    Traceback (most recent call last):
  File "/Users/leoconnelly/PycharmProjects/MLFinal/tester.py", line 27, in <module>
    tempGenre = (contents['results'][i]['genre'])
TypeError: list indices must be integers or slices, not str

1 个答案:

答案 0 :(得分:2)

您需要for i in range(len(content['results'])),然后content['results'][i]将作为list indices must be integers

完成for i in content后,您将遍历内容字典的键,即字符串。


但是,contents['results']是一个列表。您可以将它们作为完整的对象进行循环,而不必获取特定的数字索引。

这使用列表推导从结果列表中获取电影对象的完整列表。

with open('movies.json') as f:
    contents = json.load(f)
    results = contents.get('results', [])
    movies = [ 
       Movie(
           r.get('title'),
           r.get('director'),
           r.get('genre'),
           r.get('cast')
       ) for r in results ]
    for m in movies:
        print(m.name)
  

我希望能够遍历所有类型,导演,演员并将其添加到单独的数组中

您可以从制作的电影数组中进行类似的操作。

通过将set对象放入列表,这将返回所有电影的唯一导演。

directors = list(set(m.director for m in movies if m.director is not None))