You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并两个文本文件中的三个字典并对相同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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 19:57:41