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

Pandas DataFrame填充JSON模板重复问题:如何实现一行一模板?

问题:遍历DataFrame填充JSON模板后列表全是最后一行重复内容

问题原因

你遇到的问题本质是Python字典的引用特性:data_template是一个字典对象,每次循环中你修改的都是同一个字典的属性,而添加到dict_list里的是这个字典的引用,不是新的副本。最终列表里的所有元素都指向同一个字典对象,当最后一次循环修改完字典后,所有列表元素都会显示最后一次修改的内容。

解决方案

下面提供两种高效的解决方式:

方法1:深拷贝模板字典

每次循环时,对原始模板字典进行深拷贝,创建一个独立的新对象,再修改并添加到列表:

import json
import pandas as pd
import copy

# 读取并解析运动数据
with open('exercises.json','r') as f:
    data = json.loads(f.read())
df = pd.json_normalize(data, record_path = ['exercises'])
parsed_df = df[['name', 'category']]
parsed_df.loc[:, 'authorized'] = True

# 加载模板并生成结果列表
with open('template.json','r') as f:
    data_template = json.loads(f.read())

dict_list = []
for index, row in parsed_df.iterrows():
    # 深拷贝模板,创建独立的新字典
    new_template = copy.deepcopy(data_template)
    new_template['pk'] = index + 1  # 保持pk从1开始连续,可根据需求调整
    new_template['fields']['name'] = row['name']
    new_template['fields']['category'] = row['category']
    new_template['fields']['authorized'] = row['authorized']
    dict_list.append(new_template)

方法2:直接生成新字典(更简洁)

如果模板结构固定,可以直接在循环里生成新的字典结构,避免依赖外部模板的拷贝操作:

import json
import pandas as pd

# 读取并解析运动数据
with open('exercises.json','r') as f:
    data = json.loads(f.read())
df = pd.json_normalize(data, record_path = ['exercises'])
parsed_df = df[['name', 'category']]
parsed_df.loc[:, 'authorized'] = True

# 直接生成结果列表
dict_list = []
for index, row in parsed_df.iterrows():
    new_entry = {
        "model": "myapp.exercise",
        "pk": index + 1,
        "fields": {
            "name": row['name'],
            "category": row['category'],
            "authorized": row['authorized']
        }
    }
    dict_list.append(new_entry)

验证结果

执行上述代码后,dict_list中的每个元素都会对应DataFrame的一行数据,不再出现重复的最后一行内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:57:20