数组内字典数据复制输出异常,需修正为指定格式
问题排查与代码修正
问题根源
- 字典引用复用:原代码直接将同一个
each_tc字典对象多次追加到结果列表中,所有列表元素指向同一个内存地址,后续修改字典内容会同步影响所有列表项。 - 名称累加错误:每次循环都在已修改的
name值上继续拼接,导致名称出现非预期的累加结果,同时因为引用同一对象,最终所有项的名称都会变成最后一次修改的内容。
修正后的代码
json_data = {"map":[{"name":"test"}]} def replicator(data, replica=1): final_data = {} for each_map_tcs in data.keys(): final_data[each_map_tcs] = [] original_items = data[each_map_tcs] for each_tc in original_items: # 保存原始name值,避免累加修改 original_name = each_tc['name'] for i in range(replica): # 创建字典副本,避免引用同一对象 new_tc = each_tc.copy() new_tc['name'] = f"{original_name}-{i}" final_data[each_map_tcs].append(new_tc) print(final_data) replicator(json_data, 2)
输出结果
运行修正后的代码,输出符合预期:
{'map': [{'name': 'test-0'}, {'name': 'test-1'}]}
关键修改点
- 创建字典副本:使用
each_tc.copy()生成新的字典对象,确保每个列表项都是独立的实例,避免修改一处影响全部。 - 基于原始名称生成新名称:提前保存原始
name值,每次循环都从原始值出发拼接序号,彻底避免累加错误。 - 提前初始化列表:在遍历子项前先初始化结果列表,减少重复的键存在性判断,让代码更简洁高效。
内容的提问来源于stack exchange,提问作者Partha Sardar
相关产品推荐
相关产品推荐

