I have different nested dictionaries, want to calculate discount wise score
A = {'tr_1': {'hos': 100.0, 'dy': 100.0},
'tr_2': {'hos': 100.0, 'dy': 50.0},
'tr_3': {'hos': 100.0, 'dy': 50.0}}
B = {'tr_1': {'cor': 160, 'ner': 0},
'tr_2': {'cor': 69, 'ner': 36.14},
'tr_3': {'cor': 63, 'ner': 41.69}}
c = {'tr_1': {'st': 0, 'st_c': 100.0},
'tr_2': {'st': 1368, 'st_c': 0},
'tr_3': {'st': 1366, 'st_c': 0}}
Below code is for single discount. I want to do this calculation for each trip want to save in another dictionary
dis = {}
A = {'dy':18}
B = {'ner':89}
C = {'st_c':56}
eff = (
(20 * A['dy'])
(20 * B['ner'])
(20 * C['st_c'])
dis['value'] = eff
expected output like be:
dis = {'tr_1': {'eff':32},
'tr_2': {'eff':45},
'tr_3': {'eff':23}}
how to do that? Not required to multiply each nested dict in the last as you can see in the screenshot adding screenshot of expected but want in dict
column eff be like
dd = {'tr1': {'eff':40},
'tr2':{'eff':360},
'tr3':{'eff':410}
CodePudding user response:
IIUC, you can try:
import math
dicts = [A, B, C]
keys = ['dy', 'ner', 'st_c']
out = {k: {'eff': round(0.2*math.prod(d[k][k2] for k2,d in zip(keys, dicts)), 2)}
for k in A}
print(out)
Output:
{'tr_1': {'eff': 9.0},
'tr_2': {'eff': 54.0},
'tr_3': {'eff': 44.8}}
Used input:
A = {'tr_1': {'hos': 100.0, 'dy': 3},
'tr_2': {'hos': 100.0, 'dy': 9},
'tr_3': {'hos': 100.0, 'dy': 4}}
B = {'tr_1': {'cor': 160, 'ner': 5},
'tr_2': {'cor': 69, 'ner': 6},
'tr_3': {'cor': 63, 'ner': 8}}
C = {'tr_1': {'st': 0, 'st_c': 3},
'tr_2': {'st': 1368, 'st_c': 5},
'tr_3': {'st': 1366, 'st_c': 7}}