Python遍历TMDB数据集追加字典项时数据被覆盖问题求解
问题根因
代码存在两处逻辑错误,直接导致结果仅保留最后一条匹配记录:
- 匹配到符合条件的影片时,执行
final_list = [movie_dict]会直接将结果列表重新赋值为仅含当前影片字典的新列表,之前存入的所有匹配记录会被全量覆盖,而非追加新内容。 - 未在循环内部初始化影片字典,全程在修改循环外定义的同一个
movie_dict可变对象。Python中字典为引用类型,即便后续修改为追加操作,列表内存储的所有字典引用都会指向同一个内存地址,最终所有条目都会被最后一次循环的赋值覆盖。
你在if分支内加print能正常打印所有符合条件的影片,是因为print执行时movie_dict刚好被赋值为当前循环的影片信息,还未被下一轮循环的内容修改,因此控制台输出符合预期,但最终结果集会受上述两个问题影响丢失前面的记录。
修复后代码
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
内容的提问来源于stack exchange,提问作者Ankit jaiswal
相关产品推荐
相关产品推荐

