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
相关产品推荐
相关产品推荐

