减去两个嵌套字典python

vojdkbi0  于 2023-01-12  发布在  Python
关注(0)|答案(1)|浏览(131)

我有两个嵌套Dict

{'BTC': {'DAE': -10526, 'Vega': 186, 'Theta': -34, 'Gamma': 149674},
 'ETH': {'DAE': -1123, 'Vega': 57, 'Theta': -5, 'Gamma': 2257}}

以及

{'BTC': {'DAE': -105126, 'Vega': 1186, 'Theta': -314, 'Gamma': 1419674},
 'ETH': {'DAE': -11213, 'Vega': 157, 'Theta': -15, 'Gamma': 22157}}

想得到被减的dict值。用for循环得到相同的值。但是除了for循环以外的任何其他方法。

ws51t4hk

ws51t4hk1#

假设你想要d1 - d2
您可以使用字典理解:

out = {k1: {k2: v2-d2[k1][k2] for k2,v2 in v1.items()} for k1, v1 in d1.items()}

如果有可能d2中不存在所有值:

out = {k1: {k2: v2-d2.get(k1, {}).get(k2, 0) for k2,v2 in v1.items()}
       for k1, v1 in d1.items()}

或者使用pandas

import pandas as pd
out = pd.DataFrame(d1).sub(pd.DataFrame(d2)).to_dict()

输出:

{'BTC': {'DAE': 94600, 'Vega': -1000, 'Theta': 280, 'Gamma': -1270000},
 'ETH': {'DAE': 10090, 'Vega': -100, 'Theta': 10, 'Gamma': -19900}}

可重现输入:

d1 = {'BTC': {'DAE': -10526, 'Vega': 186, 'Theta': -34, 'Gamma': 149674},
      'ETH': {'DAE': -1123, 'Vega': 57, 'Theta': -5, 'Gamma': 2257}}

d2 = {'BTC': {'DAE': -105126, 'Vega': 1186, 'Theta': -314, 'Gamma': 1419674},
      'ETH': {'DAE': -11213, 'Vega': 157, 'Theta': -15, 'Gamma': 22157}}

相关问题