You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何在嵌套字典内的列表中查找指定电影字典并实现跨列表移动

代码问题分析

你的现有代码存在两个核心逻辑错误:

  • 判断条件if title in user_data是检查title是否是外层user_data字典的键,完全不符合「检查watchlist里有没有对应标题的电影」的需求
  • watchlist列表里存的是电影字典,不是字符串类型的标题,直接调用remove(title)会抛出ValueError异常,根本找不到匹配项
修正后代码

默认你的电影字典里存储标题的键是title,如果实际键名不一样自行替换即可:

def watch_movie(user_data, title):
    # 遍历watchlist查找匹配标题的电影
    for movie in user_data["watchlist"]:
        if movie.get("title") == title:
            # 找到后移动到watched列表
            user_data["watchlist"].remove(movie)
            user_data["watched"].append(movie)
            break
    # 无论有没有找到都返回user_data,和原有返回逻辑保持一致
    return user_data

如果能确保所有电影字典都有标题字段,也可以把movie.get("title")换成movie["title"]

可选优化点
  • 如果需要支持找不到电影时返回提示,可以加标识位:
def watch_movie(user_data, title):
    found = False
    for movie in user_data["watchlist"]:
        if movie.get("title") == title:
            user_data["watchlist"].remove(movie)
            user_data["watched"].append(movie)
            found = True
            break
    return user_data, found
# 调用时可以接收第二个返回值判断是否找到
  • 如果watchlist数据量很大,遍历查找效率低,可以预先给watchlist建立标题到电影字典的映射,一般个人项目电影列表不会超过几千条,遍历完全够用
  • 可以增加参数校验,防止传入的user_data缺少watchlist或者watched键时报错:
def watch_movie(user_data, title):
    if "watchlist" not in user_data or "watched" not in user_data:
        raise ValueError("传入的user_data缺少必要的watchlist或watched字段")
    for movie in user_data["watchlist"]:
        if movie.get("title") == title:
            user_data["watchlist"].remove(movie)
            user_data["watched"].append(movie)
            break
    return user_data

内容的提问来源于stack exchange,提问作者sasquatchphd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:48:01