Python循环向列表追加字典时重复覆盖旧数据如何解决?
问题原因
Python中的字典属于可变对象,你在循环外声明了temp = {},意味着全程只有一个内存地址固定的temp字典实例:
- 每次循环修改
temp的键值,都是直接修改同一个实例的内容 - 调用
append(temp)时,实际是把temp的内存引用存入列表,而非复制一份新的字典 - 最终列表里所有元素都指向同一个
temp实例,所有值都会被最后一次循环的赋值覆盖,出现全量重复的情况。
修复方案
把temp字典的声明移动到循环内部,每次循环都生成一个全新的字典实例,保证每次加入列表的都是独立的字典对象,互不干扰。同时原代码中final的赋值放在循环内属于冗余操作,循环结束后赋值一次即可。
修改后代码
import requests url = "https://api.henrikdev.xyz/valorant/v3/matches/eu/shaun/6969?filter=competitive" r = requests.get(url).json() red = [] blue = [] final = {} for i in range(0,10): temp = {} # 每次循环新建独立的temp字典 player_data = r['data'][0]['players']['all_players'][i] temp['team'] = player_data['team'] temp['player'] = player_data['name'] temp['stats']= player_data['stats'] temp['char'] = player_data['character'] if temp['team'] == "Red": red.append(temp) print(red) elif temp['team'] == "Blue": blue.append(temp) # 循环结束后统一赋值final final["blue"] = blue final['red']= red
内容的提问来源于stack exchange,提问作者Bruh moment
相关产品推荐
相关产品推荐

