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

如何用纯Python处理CSV构建观影偏好字典并解决标题末尾空格问题

问题原因与修正方案


1. 电影标题无法去除末尾空格的问题

你写的for movie in movietitles: movie=movie.rstrip() 并没有修改movietitles列表本身的元素:字符串是Python中的不可变类型,循环里的movie只是临时变量,修改它不会同步到原列表。正确做法是遍历下标修改,或者生成新的清洗后列表。

2. 姓名与偏好无法正确写入字典的问题

你错误地把整行字符串line直接按下标取值,正确逻辑应该是先把每行按逗号分割成列表,再按位置取姓名、偏好字段,同时还要把偏好值从字符串转成整数类型。另外原代码没有跳过表头行,会把表头也当成用户偏好数据处理。

修正后完整代码

def read_in_movie_preference():
    """Read the move data, and return a 
    preference dictionary."""
    preference = {}
    movies = []
    
    file_location = "./data/"
    # 用with语句自动管理文件关闭,避免资源泄漏
    with open(file_location + "preference.csv", "r", encoding="utf-8") as f:
        lines = f.readlines()
    
    # 处理表头的电影名称
    header = lines[0].strip("\n").split(",")
    # 直接生成清洗掉末尾空格的电影名称列表,跳过前两列非电影字段
    movies = [title.rstrip() for title in header[2:]]
    
    # 处理每一行用户偏好数据,跳过表头行
    for line in lines[1:]:
        # 先清洗换行符,再按逗号分割成字段列表
        fields = line.strip("\n").split(",")
        if len(fields) < 2: # 跳过空行避免报错
            continue
        # 取姓名字段
        name = fields[1].strip()
        # 从第三个字段开始是偏好值,逐个转成整数
        prefs = [int(p.strip()) for p in fields[2:]]
        preference[name] = prefs
    
    print(movies)
    return [movies, preference]

额外兼容优化

  • 所有字段都增加了通用的空格清洗逻辑,兼容字段前后存在多余空格的脏数据场景
  • 增加空行判断,避免数据集存在空行时触发下标越界报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:09:02