计算两个嵌套字典之间的增量值(Python)



我试图在两个嵌套字典中找到数值之间的delta,它们看起来像这样:

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"}}}}}

因此,在这个例子中,我希望输出看起来像这样:

{"ifInDiscards":5, "ifInErrors":0, "ifOutDiscards":5, "ifOutErrors": 11}

有什么建议吗?

deviceValueMap级别对两个对进行迭代,然后执行子动作

result = {}
for (k1, v1), (k2, v2) in zip(
d1['filteredData']['device_id_1']['deviceValueMap'].items(),
d2['filteredData']['device_id_1']['deviceValueMap'].items()):

if "i" in v1 and "i" in v2:
result[k1] = int(v2['i']) - int(v1['i'])
print(result)
# {'ifInDiscards': 5, 'ifInErrors': 0, 'ifOutDiscards': 5, 'ifOutErrors': 11}

只有当两者按相同的顺序订购并包含相同的密钥(if*密钥(时,这才有效

最新更新