Python更新UAV_dict值时所有车辆数据存入每个键的问题咨询
问题原因与修复方案
根本原因
- 第一个问题:公共键模板的列表引用重复
你预先定义的keys字典里的所有空列表都是唯一的内存对象,调用update方法时,每个车辆字典的time/aspd等字段都会指向同一个列表实例。任意一个列表新增数据,所有车辆字典的对应字段都会同步更新,本质上所有车辆共享同一组数据容器。 - 第二个问题:最终循环的变量名误用
你最后遍历车辆的循环迭代变量是a_key,但循环内部读写数据时全用了上一层循环遗留的变量key,这个变量在遍历完所有UAV_dict键后,固定指向最后一个键veh_5,导致所有车辆的数据都被写入同一个位置,再结合前一个引用问题,就出现了所有数据累加的情况。
修复后的代码
可以直接省略冗余的车辆字典初始化步骤,一步生成每个车辆的独立数据容器,同时修正循环变量名即可:
UAV_dict = {} # 直接生成每个车辆的独立字典,不存在共用引用问题 for i in range(1, 6): UAV_dict[f"veh_{i}"] = { 'time': [], 'aspd': [], 'gspd': [], 'hdg': [], 'alt': [], 'time2': [], 'lat': [], 'lon': [] } # 遍历写入数据,统一使用迭代变量a_key for a_key in UAV_dict.keys(): for data in hud_data.get(a_key): UAV_dict[a_key]['time'].append(data[0]) UAV_dict[a_key]['aspd'].append(data[1]) UAV_dict[a_key]['gspd'].append(data[2]) UAV_dict[a_key]['hdg'].append(data[3]) UAV_dict[a_key]['alt'].append(data[4]) for data in ahrs2_data.get(a_key): UAV_dict[a_key]['time2'].append(data[0]) UAV_dict[a_key]['lat'].append(data[1]) UAV_dict[a_key]['lon'].append(data[2])
内容的提问来源于stack exchange,提问作者Michael Wish
相关产品推荐
相关产品推荐

