如何从两个不同的嵌套字典中减去值?



我有两个字典:

> type(dict1)
<class 'dict1'>
> dict1
{'index1': {'output': [{'quant': 27587.2, 'var1': 20, 'var2': 5, 'list1': {}}]},  
'index2': {'output': [{'quant': 29795.9, 'var1': 22, 'var2': 5, 'list1': {}}]}
}
> type(dict2)
<class 'dict2'>
> dict2
{'index1': {'output': [{'quant': 46587.2, 'var1': 20, 'var2': 5, 'list1': {}}]},  
'index2': {'output': [{'quant': 39795.9, 'var1': 22, 'var2': 5, 'list1': {}}]}
}

输出需要从相应的'index'和returndict2中减去dict1中的'quant'输出:

> output
{'index1': {'output': [{'quant': 19000, 'var1': 20, 'var2': 5, 'list1': {}}]},  
'index2': {'output': [{'quant': 10000, 'var1': 22, 'var2': 5, 'list1': {}}]}
}

我可以对简单字典这样做,但不能像上面那样对嵌套字典这样做。谁能建议一种方法在python中做到这一点?

d1 = {'a': 10, 'b': 9, 'c': 8, 'd': 7}
d2 = {'a': 1, 'b': 2, 'c': 3, 'e': 2}
d3 = {}
for k, v in d1.items():
d3[k] = v - d2.get(k, 0) 
print(d3)
{'c': 5, 'b': 7, 'a': 9, 'd': 7}

尝试:

out = {}
for k2, v2 in dict2.items():
out.setdefault(k2, {})["output"] = [
{
**v2["output"][0],
"quant": v2["output"][0]["quant"] - dict1[k2]["output"][0]["quant"],
}
]

print(out)

打印:

{
"index1": {
"output": [
{"quant": 18999.999999999996, "var1": 20, "var2": 5, "list1": {}}
]
},
"index2": {
"output": [{"quant": 10000.0, "var1": 22, "var2": 5, "list1": {}}]
},
}

由于正在进行浮点运算,因此必须将差值四舍五入以产生所需的结果。

from pprint import pp
dict1 = {'index1': {'output': [{'quant': 27587.2, 'var1': 20, 'var2': 5, 'list1': {}}]},
'index2': {'output': [{'quant': 29795.9, 'var1': 22, 'var2': 5, 'list1': {}}]}}
dict2 = {'index1': {'output': [{'quant': 46587.2, 'var1': 20, 'var2': 5, 'list1': {}}]},
'index2': {'output': [{'quant': 39795.9, 'var1': 22, 'var2': 5, 'list1': {}}]}}
diff_dict = {}
for (key, value) in dict1.items():
diff_dict[key] = dict2[key]  # Copy everything associated with key in second dict.
# Replace 'quant` with rounded difference between value in second and first dict.
diff_dict[key]['output'][0]['quant'] = round(dict2[key]['output'][0]['quant'] -
value['output'][0]['quant'], 1)
pp(diff_dict, compact=True)

输出:

{'index1': {'output': [{'quant': 19000.0, 'var1': 20, 'var2': 5, 'list1': {}}]},
'index2': {'output': [{'quant': 10000.0, 'var1': 22, 'var2': 5, 'list1': {}}]}}

最新更新