如何计算Python中两个嵌套字典的数值差值(delta)
计算嵌套字典数值差值的解决方案
核心思路
从两个嵌套字典的deviceValueMap节点中,筛选出数值型字段(排除字符串状态的ifOperStatus),计算第二个字典对应值与第一个字典的差值,最终生成目标结果字典。
代码实现
# 定义原始字典 d1 = {"device":"ABC","filteredData":{"device_id_1":{"deviceValueMap":{"ifInDiscards":{"i":"5"},"ifInErrors":{"i":"0"},"ifOperStatus":{"s":"up"},"ifOutDiscards":{"i":"0"},"ifOutErrors":{"i":"2"}}}}} d2 = {"device":"ABC","filteredData":{"device_id_1":{"deviceValueMap":{"ifInDiscards":{"i":"10"},"ifInErrors":{"i":"0"},"ifOperStatus":{"s":"up"},"ifOutDiscards":{"i":"5"},"ifOutErrors":{"i":"13"}}}}} # 提取目标节点的数值映射 value_map1 = d1["filteredData"]["device_id_1"]["deviceValueMap"] value_map2 = d2["filteredData"]["device_id_1"]["deviceValueMap"] # 计算差值 delta = {} for key in value_map1: # 跳过非数值型状态字段 if key == "ifOperStatus": continue # 将字符串数值转为整数,计算d2 - d1的差值 val1 = int(value_map1[key]["i"]) val2 = int(value_map2[key]["i"]) delta[key] = val2 - val1 print(delta)
输出结果
{'ifInDiscards': 5, 'ifInErrors': 0, 'ifOutDiscards': 5, 'ifOutErrors': 11}
扩展说明
- 如果存在多个设备ID(
filteredData下有多个键),可以遍历filteredData的所有键,批量计算每个设备的差值 - 若数值可能为浮点数,将代码中的
int()替换为float()即可适配 - 若需要动态判断数值字段(而非硬编码跳过
ifOperStatus),可以通过判断字段值的键是否为i来筛选:if list(value_map1[key].keys())[0] == 'i'
内容的提问来源于stack exchange,提问作者Kat Adler
相关产品推荐
相关产品推荐

