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

Python嵌套字典差值计算:匹配同名键求整数字段差值

嵌套字典的字段差值实现方案

核心逻辑

  • 以Name为键建立上一分钟数据的映射表,实现快速匹配
  • 遍历当前数据条目,仅对C_*开头的整数字段计算差值
  • 新增字段(上一分钟无对应项)直接保留当前值,或按需求以0为基准计算差值

示例代码

# 模拟上一分钟的嵌套字典数据
prev_min_data = {
    "entry1": {"Name": "Name1", "C_001": 12, "C_002": 24, "Desc": "sample1"},
    "entry2": {"Name": "Name2", "C_001": 7, "C_003": 18}
}

# 模拟当前分钟的嵌套字典数据
current_min_data = {
    "entryA": {"Name": "Name1", "C_001": 18, "C_002": 30, "C_007": 22},
    "entryB": {"Name": "Name2", "C_001": 10, "C_003": 25},
    "entryC": {"Name": "Name3", "C_004": 15}
}

# 1. 构建上一分钟数据的Name映射,方便快速匹配
prev_name_map = {item["Name"]: item for item in prev_min_data.values()}

# 2. 计算差值并生成结果
diff_result = {}
for entry_id, current_item in current_min_data.items():
    item_name = current_item["Name"]
    # 先保留非C_*字段
    res_entry = {k: v for k, v in current_item.items() if not k.startswith("C_")}
    
    # 匹配上一分钟的对应条目
    matched_prev_item = prev_name_map.get(item_name)
    if matched_prev_item:
        # 处理所有C_*开头的整数字段
        for key in current_item:
            if key.startswith("C_") and isinstance(current_item[key], int):
                # 上一分钟无该字段时,默认用0做差值基准,可按需调整
                prev_value = matched_prev_item.get(key, 0)
                res_entry[key] = current_item[key] - prev_value
    else:
        # 无匹配条目时,直接保留当前C_*字段值
        for key in current_item:
            if key.startswith("C_") and isinstance(current_item[key], int):
                res_entry[key] = current_item[key]
    
    diff_result[entry_id] = res_entry

# 打印结果
for idx, data in diff_result.items():
    print(f"{idx}: {data}")

关键细节说明

  • 映射表优化:用Name做键的字典匹配,比循环遍历查找效率更高
  • 字段过滤:通过startswith("C_")和isinstance确保只处理目标类型字段
  • 新增字段兼容:利用dict.get()方法处理字段不存在的情况,避免KeyError
  • 非计算字段保留:通过字典推导式原样保留非C_*字段,保证数据完整性

内容的提问来源于stack exchange,提问作者C.Cab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:55:25