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

Python3中计算两个字典匹配键对应值的差值方法问询

问题:计算两个通道字典的差值

我有两个存储特定channels(通道)及其值的字典,这些通道每秒更新一次。我的最终目标是创建一个工具/GUI,用于判断这些对应光学安装DOFs的通道的偏差程度。

目前我已实现两个函数:一个用于获取当前时间并记录该时刻的通道值存入字典,另一个允许选择时间并执行相同操作。

我在项目中遇到的困惑是如何比较这两个字典。我希望匹配两个字典中的键(即通道名),计算对应值的差值,并将结果存入一个具有相同键的第三个字典。

以下是我尝试的代码思路:

diff_channels_dict = {}
### 生成字典的函数执行后,会得到如下示例(实际内容更长)

ref_channels_dict = {
    'IM1_M1_P_OFFSET': 8,
    'IM1_M1_Y_OFFSET': 8,
    'IM2_M1_P_OFFSET': 8
}
now_channels_dict = {
    'IM1_M1_P_OFFSET': 2,
    'IM1_M1_Y_OFFSET': 2,
    'IM2_M1_P_OFFSET': 2
}

def some_func():
    for key in now_channels_dict and ref_channels_dict:
        diff = now_channels_dict[value] - ref_channels_dict[value]
        diff_channels_dict[key].append(diff)
    return

some_func()

### 预期得到
diff_channels_dict = {
    'IM1_M1_P_OFFSET': -6,
    'IM1_M1_Y_OFFSET': -6,
    'IM2_M1_P_OFFSET': -6
}

我了解过deepdiff、Dictdiffer等库,但使用该工具的所有机器环境都无法访问这些库,请问该如何实现?


解决方案

你的代码存在几个逻辑错误,修正后即可实现需求:

  1. 遍历共同键:for key in now_channels_dict and ref_channels_dict 写法逻辑错误,应该遍历两个字典的共同键,可以用 ref_dict.keys() & now_dict.keys() 获取键的交集。
  2. 变量未定义:代码中使用了未声明的 value 变量,需替换为循环中的 key 来访问字典值。
  3. 字典赋值错误:diff_channels_dict[key].append(diff) 是列表操作,但你需要的是每个键对应单个差值,直接赋值即可,无需 append。

修正后的代码如下:

ref_channels_dict = {
    'IM1_M1_P_OFFSET': 8,
    'IM1_M1_Y_OFFSET': 8,
    'IM2_M1_P_OFFSET': 8
}
now_channels_dict = {
    'IM1_M1_P_OFFSET': 2,
    'IM1_M1_Y_OFFSET': 2,
    'IM2_M1_P_OFFSET': 2
}

def calculate_channel_diff(ref_dict, now_dict):
    diff_channels_dict = {}
    # 遍历两个字典的共同键
    for key in ref_dict.keys() & now_dict.keys():
        # 计算当前值与参考值的差值
        diff = now_dict[key] - ref_dict[key]
        diff_channels_dict[key] = diff
    return diff_channels_dict

# 调用函数得到结果
diff_channels_dict = calculate_channel_diff(ref_channels_dict, now_channels_dict)
print(diff_channels_dict)

运行后会得到预期结果:

{'IM1_M1_P_OFFSET': -6, 'IM1_M1_Y_OFFSET': -6, 'IM2_M1_P_OFFSET': -6}

额外优化建议

  • 如果需要处理仅在其中一个字典存在的键,可补充逻辑(比如将差值设为0或标记为缺失)。
  • 函数通过参数传入两个字典,避免依赖全局变量,代码更灵活可复用。

内容的提问来源于stack exchange,提问作者ryancrouch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:15:48