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等库,但使用该工具的所有机器环境都无法访问这些库,请问该如何实现?
解决方案
你的代码存在几个逻辑错误,修正后即可实现需求:
- 遍历共同键:
for key in now_channels_dict and ref_channels_dict写法逻辑错误,应该遍历两个字典的共同键,可以用ref_dict.keys() & now_dict.keys()获取键的交集。 - 变量未定义:代码中使用了未声明的
value变量,需替换为循环中的key来访问字典值。 - 字典赋值错误:
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
相关产品推荐
相关产品推荐

