Search code examples
pythondictionarysubtraction

Subtract dict value from a nested dict if the key exists


Basically I made this request to perform the operation efficiently but I guess the data structure I'm using isn't.

First dict:

f_dict = {'n1':{'x':1,'y':1,'z':3},'n2':{'x':6,'y':0, 'z':1}, ...}
s_dict = {'x':3,'t':2, 'w':6, 'y':8, 'j':0, 'z':1}

I want to obtain e such that:

e = {'n1':{'x':-2,'y':-7,'z':1},'n2':{'x':3,'y':-8,'z':0}, ...} 

Solution

  • You could use a nested dictionary comprehension and use dict.get to subtract the value or a default value (in this case 0):

    >>> {key: {ikey: ival - s_dict.get(ikey, 0) 
    ...        for ikey, ival in i_dct.items()} 
    ...  for key, i_dct in f_dict.items()}
    {'n1': {'x': -2, 'y': -7, 'z': 2}, 'n2': {'x': 3, 'y': -8, 'z': 0}}
    

    Or if you prefer explicit loops:

    res = {}
    for key, i_dict in f_dict.items():
        newdct = {}
        for ikey, ival in i_dict.items():
            newdct[ikey] = ival - s_dict.get(ikey, 0)
        res[key] = newdct
    
    print(res)
    # {'n1': {'x': -2, 'y': -7, 'z': 2}, 'n2': {'x': 3, 'y': -8, 'z': 0}}