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

Python实现按userId分组CSV数据为字典数组(不依赖pandas)

问题原因

现有代码仅在遍历到不同的新用户ID时,才会将上一个用户的聚合结果写入返回数组,遍历完成后最后一个用户的聚合数据没有被追加到结果中,会出现缺失最后一条用户记录的问题。

修正后代码

仅需在循环结束后补充最后一条用户记录的写入逻辑即可,完整代码如下:

def get_body(batch):
    result = []
    record = {}
    scores = []
   
    for row in batch:
        if 'userId' in record and record['userId'] != row[0]:
            result.append({'userId': record['userId'], 'scores': scores})
            record = {}
            scores = []
        
        if 'userId' not in record:
            record['userId'] = row[0]

        scores.append({'movieId': row[1], 'score': float(row[2])})
    # 新增:追加最后一个用户的聚合结果
    if record:
        result.append({'userId': record['userId'], 'scores': scores})
    return result

使用示例

你可以配合Python标准库csv读取目标CSV文件完成处理,无需引入第三方依赖:

import csv

if __name__ == "__main__":
    # 替换为你的CSV文件实际路径
    with open('data.csv', 'r', encoding='utf-8') as f:
        csv_reader = csv.reader(f)
        # 若你的CSV文件包含表头行,取消注释下行跳过表头
        # next(csv_reader)
        output = get_body(csv_reader)
        print(output)

针对你给出的示例输入,上述代码输出完全符合预期格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 04:06:03