Python中如何向Dictionary追加键值对而非覆盖原有数据?
问题根源
你现在碰到的问题其实很好理解——字典的键天生具有唯一性。你用{**data, **new_dict}这种方式合并两个字典时,只要键名重复,后面字典里的键值对就会直接覆盖前面的。你那两个字典里的键(比如level_a_title)完全一样,所以第二个磁盘的信息直接把第一个的给替换掉了,自然看不到“追加”的效果。
两种正确的实现方法
根据你的需求,给你推荐两种常用的解决方案:
方法1:把data做成字典的列表(最推荐)
如果每个磁盘都是独立的条目,用列表来装这些字典是最合理的结构,既能轻松追加新数据,后续操作也更清晰:
# 先初始化一个装磁盘信息的列表 data = [ {'level_a_title': 'Disk 1', 'level_a_show_on_analysis_report': '1', 'level_a_type': 'text', 'level_a_value': 'Windows'} ] # 直接用append追加新的磁盘字典就行 data.append({'level_a_title': 'Disk 2', 'level_a_show_on_analysis_report': '1', 'level_a_type': 'text', 'level_a_value': 'Backup'}) # 遍历打印所有磁盘信息 for i, disk_info in enumerate(data, start=1): print(f"=== 第{i}个磁盘 ===") for key, value in disk_info.items(): print(f"{key} = {str(value)}")
运行后会输出:
=== 第1个磁盘 === level_a_title = Disk 1 level_a_show_on_analysis_report = 1 level_a_type = text level_a_value = Windows === 第2个磁盘 === level_a_title = Disk 2 level_a_show_on_analysis_report = 1 level_a_type = text level_a_value = Backup
方法2:修改键名,保证每个键唯一
如果你非要用单个字典来存,那得给每个磁盘的键加个唯一标识(比如序号),避免键名重复:
# 初始化第一个磁盘的信息,键名带_1后缀 data = {'level_a_1_title': 'Disk 1', 'level_a_1_show_on_analysis_report': '1', 'level_a_1_type': 'text', 'level_a_1_value': 'Windows'} # 用update方法追加第二个磁盘的键值对,键名带_2后缀 data.update({ 'level_a_2_title': 'Disk 2', 'level_a_2_show_on_analysis_report': '1', 'level_a_2_type': 'text', 'level_a_2_value': 'Backup' }) # 打印所有内容 for key, value in data.items(): print(f"{key} = {str(value)}")
运行输出:
level_a_1_title = Disk 1 level_a_1_show_on_analysis_report = 1 level_a_1_type = text level_a_1_value = Windows level_a_2_title = Disk 2 level_a_2_show_on_analysis_report = 1 level_a_2_type = text level_a_2_value = Backup
小建议
强烈推荐第一种方法,列表存字典的结构完全符合“多个同类数据条目”的场景,不管是后续要加更多磁盘,还是要筛选、修改某个磁盘的信息,都会方便很多。用单个字典的话,键名要自己手动维护唯一性,时间长了很容易出错,代码也会变得乱糟糟的。
内容的提问来源于stack exchange,提问作者Europa
相关产品推荐
相关产品推荐

