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

Python中向列表追加多个字典时旧内容被覆盖是什么原因?

问题原因

这是Python可变对象的引用特性导致的:

  • 你将item = {}定义在了内层for weapon in data['weapons']循环的外部,整个遍历过程中全程操作的都是同一个字典对象
  • 列表append字典时,存入的是字典的内存引用而非值拷贝,后续修改这个字典的属性时,列表里所有指向该引用的元素都会同步更新
  • 你注释掉的item.clear()也会触发同样的问题,因为它还是修改的同一个字典对象,并不会生成新字典
解决方法

每次遍历武器时都新建一个独立的字典对象,把item = {}移到内层循环内部即可,修改后的代码如下:

for x in range(len(data_set)):
    data = json.loads(data_set[x][1])
    items = []

    try:
        for weapon in data['weapons']:
            # 每次循环新建独立字典
            item = {}
            item['type'] = 'item_weapon'
            item['name'] = weapon['name']
            item['count'] = weapon['ammo']
            items.append(item)
            print(items)
    except Exception:
        pass

如果需要保留原有item.clear()的写法,也可以在append时做一次浅拷贝,改成items.append(item.copy())即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:09:00