我试图通过将tmdb电影数据集转换为json,从tmdb电影数据集中按类型获取电影.

像《奇遇》这样的特定类型应该有多个条目,但我看到的只是最后一张记录,似乎之前的记录正在被覆盖.我通过在if语句中添加print语句验证了这一点,细节显示在控制台中,但不知何故被覆盖了.

任何帮助都将不胜感激.谢谢

final_list = []
for i in range(1,1000):
        if genre_name in data[str(i)]['genres']:
            movie_dict["Title"] = data[str(i)]['title']
            movie_dict["Language"] = data[str(i)]['original_language']
            final_list = [movie_dict]
    return final_list

推荐答案

有两个明显的问题.在循环中重新定义final_list,并在第一个循环中返回.

修复后会得到如下结果:

def myfunction(data, genre_name):
    movie_dict = {}
    final_list = []
    for i in range(1,1000):
        if genre_name in data[str(i)]['genres']:
            movie_dict["Title"] = data[str(i)]['title']
            movie_dict["Language"] = data[str(i)]['original_language']
            final_list.append(movie_dict)
    return final_list

现在还有一个更微妙的问题.您总是将同一本词典添加到列表中.

举个例子:

d = {}
l = []
for i in range(5):
    d['x'] = i ** 2
    l.append(d)
print(l)

现在l包含同一个字典5次,该字典将包含循环最后一次迭代的内容:[{'x': 16}, {'x': 16}, {'x': 16}, {'x': 16}, {'x': 16}].要解决这个问题,您必须在循环中创建字典,因此在代码中,您必须将movie_dict = {}移动到适当的位置:

def myfunction(data, genre_name):
    final_list = []
    for i in range(1,1000):
        if genre_name in data[str(i)]['genres']:
            movie_dict = {}
            movie_dict["Title"] = data[str(i)]['title']
            movie_dict["Language"] = data[str(i)]['original_language']
            final_list.append(movie_dict)
    return final_list

现在是一些更先进的东西.我假设data是一个字典,因为您使用字符串进行索引.如果您不限于data0个条目,但希望访问字典中的所有值,则可以循环字典值:

def myfunction(data, genre_name):
    final_list = []

    for entry in data.values():
        if genre_name in entry['genres']:
            movie_dict = {}
            movie_dict["Title"] = entry['title']
            movie_dict["Language"] = entry['original_language']
            final_list.append(movie_dict)
    return final_list

现在,让我们在调用append时动态创建字典.

def myfunction(data, genre_name):
    final_list = []

    for entry in data.values():
        if genre_name in entry['genres']:
            final_list.append({'Title': entry['title'], 'Language': entry['original_language']})
    return final_list

这可以改写为一个列表:

def myfunction(data, genre_name):
    return [{'Title': entry['title'], 'Language': entry['original_language']} for entry in data.values() if genre_name in entry['genres']]

这就是全部.

Python相关问答推荐

如何处理嵌套的SON?

如何在Python中使用io.BytesIO写入现有缓冲区?

输出中带有南的亚麻神经网络

pandas滚动和窗口中有效观察的最大数量

优化pytorch函数以消除for循环

Python键入协议默认值

为什么以这种方式调用pd.ExcelWriter会创建无效的文件格式或扩展名?

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

计算分布的标准差

合并帧,但不按合并键排序

在方法中设置属性值时,如何处理语句不可达[Unreacable]";的问题?

mdates定位器在图表中显示不存在的时间间隔

用fft计算指数复和代替求和来模拟衍射?

在Django中重命名我的表后,旧表中的项目不会被移动或删除

按条件添加小计列

如何在信号的FFT中获得正确的频率幅值

每次查询的流通股数量

高效生成累积式三角矩阵

用0填充没有覆盖范围的垃圾箱

Pandas 删除只有一种类型的值的行,重复或不重复