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

