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

字典值重复问题:为何循环添加字典后结果不符合预期?

问题原因分析:列表中字典重复显示同一值

原代码

test = [{'name' : 'one'}, {'name' : 'two'}]

a = {}
b = []
c = {}
for i in test:
     c['name'] = i['name']
     b.append(c)
a['items'] = b
print(a)

错误输出

{'items': [{'name': 'two'}, {'name': 'two'}]}

核心原因

你在循环外部定义了字典c,整个循环过程中始终操作的是同一个字典对象。每次循环里的c['name'] = i['name']只是修改这个字典的name值,而b.append(c)添加到列表里的是这个字典的引用(不是新字典的副本)。

第一次循环时,c的name被设为'one',列表b添加了该字典的引用;第二次循环时,c的name被覆盖为'two',列表b再次添加同一个字典的引用。最终打印时,列表里的两个元素指向的都是同一个字典,自然显示的都是最后一次修改的'two'。

修复方案

有两种简单的解决方式:

  • 方法一:在循环内部创建新字典
test = [{'name' : 'one'}, {'name' : 'two'}]

a = {}
b = []
for i in test:
     c = {}  # 每次循环生成新字典对象
     c['name'] = i['name']
     b.append(c)
a['items'] = b
print(a)
  • 方法二:添加字典的副本到列表
test = [{'name' : 'one'}, {'name' : 'two'}]

a = {}
b = []
c = {}
for i in test:
     c['name'] = i['name']
     b.append(c.copy())  # 存入字典副本而非引用
a['items'] = b
print(a)

两种方法都能让列表b中的元素成为独立的字典对象,最终输出预期结果:{'items': [{'name': 'one'}, {'name': 'two'}]}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:05:36