如何合并两个文本文件中的三个字典并对相同ID的Num值求和(禁用update方法)
解决字典合并并按ID求和Num的问题
我来帮你搞定这个需求!不能用update方法也没关系,我们可以手动遍历每个字典的ID,对相同ID的Num值做累加操作。下面是完整的实现步骤和代码:
1. 先处理文本文件的读取与数据解析
首先得修正你提供的文本文件格式小问题(原内容里的字典列表写法有误,每个字典需要单独用{}包裹),假设修正后的文件内容如下:
- TEXTFILE1.txt:
car1 = [{'ID':'AAT','Num': 7}, {'ID':'CCG','Num': 45}] car2 = [{'ID':'CCG','Num': 10}, {'ID':'TTT','Num': 8}, {'ID':'ATU','Num': 14}]
- TEXTFILE2.txt:
car3 = [{'ID':'GHA','Num': 85}, {'ID':'TTT','Num': 2}, {'ID':'ATU','Num': 0}]
为了安全读取并转换为Python对象,我们可以用ast.literal_eval替代风险较高的eval,代码如下:
import ast def read_car_data(file_path): """读取文本文件中的car数据,返回字典格式的结果""" car_data = {} with open(file_path, 'r', encoding='utf-8') as f: for line in f: line = line.strip() if not line: continue # 拆分变量名和值字符串 key, value_str = line.split('=', 1) key = key.strip() # 安全转换为Python列表对象 car_data[key] = ast.literal_eval(value_str.strip()) return car_data # 读取两个文件的数据 data_file1 = read_car_data('TEXTFILE1.txt') data_file2 = read_car_data('TEXTFILE2.txt') # 提取三个car的字典列表 car1 = data_file1['car1'] car2 = data_file1['car2'] car3 = data_file2['car3']
2. 实现字典合并与Num求和逻辑
我们创建一个空字典来存储合并结果,遍历所有car中的子字典,对相同ID的Num值做累加:
merged_result = {} # 遍历所有car的字典列表,统一处理 all_car_items = car1 + car2 + car3 for item in all_car_items: item_id = item['ID'] num_value = item['Num'] # 用get方法简化判断:存在则累加,不存在则初始化为当前Num merged_result[item_id] = merged_result.get(item_id, 0) + num_value # 如果需要转换回原有的列表格式(每个元素是{'ID':xxx, 'Num':xxx}) merged_list = [{'ID': id_key, 'Num': num_val} for id_key, num_val in merged_result.items()] # 查看结果 print("合并后的字典格式:") print(merged_result) # 输出: {'AAT': 7, 'CCG': 55, 'TTT': 10, 'ATU': 14, 'GHA': 85} print("\n合并后的列表格式:") print(merged_list) # 输出: [{'ID': 'AAT', 'Num': 7}, {'ID': 'CCG', 'Num': 55}, {'ID': 'TTT', 'Num': 10}, {'ID': 'ATU', 'Num': 14}, {'ID': 'GHA', 'Num': 85}]
3. 关键逻辑说明
- 我们没有使用
update方法,而是通过手动遍历+dict.get()实现了相同ID的Num累加,完全符合你的要求。 dict.get(item_id, 0)的作用是:如果item_id已经在结果字典中,就返回它对应的Num值;如果不存在,就返回默认值0,这样直接加上当前的num_value即可完成累加。
内容的提问来源于stack exchange,提问作者diya09
相关产品推荐
相关产品推荐

