Search code examples
pythondictionaryconcatenation

How to combine multiple dictionaries into one of higher dimension?


I have multiple dictionaries as follows:

{
    'Plant 1': {'min_cap': 100.0, 'max_cap': 2200.0,'Var_Cost': 0.75, 'Fix_Cost': 0.0029625000000000003},
    'Plant 2': {'min_cap': 50.0, 'max_cap': 300.0, 'Var_Cost': 0.4, 'Fix_Cost': 0.00058},
    'Plant 3': {'min_cap': 100.0, 'max_cap': 2500.0, 'Var_Cost': 1.83, 'Fix_Cost': -0.00178425},
    'Plant 4': {'min_cap': 100.0, 'max_cap': 4000.0, 'Var_Cost': 2.74, 'Fix_Cost': 0.012124500000000002}
}

I now want to combine multiple of these dictionaries (same structure, different values) into one of higher dimension. so that the resulting dictionary than looks like this:

{
'Group 1':{'Plant 1': {'min_cap': 100.0, 'max_cap': 2200.0,'Var_Cost': 0.75, 'Fix_Cost': 0.0029625000000000003},
           'Plant 2': {'min_cap': 50.0, 'max_cap': 300.0, 'Var_Cost': 0.4, 'Fix_Cost': 0.00058},
           'Plant 3': {'min_cap': 100.0, 'max_cap': 2500.0, 'Var_Cost': 1.83, 'Fix_Cost': -0.00178425},
           'Plant 4': {'min_cap': 100.0, 'max_cap': 4000.0, 'Var_Cost': 2.74, 'Fix_Cost': 0.012124500000000002}},

'Group 2':{'Plant 1': {'min_cap': 100.0, 'max_cap': 2200.0,'Var_Cost': 0.75, 'Fix_Cost': 0.0029625000000000003},
           'Plant 2': {'min_cap': 50.0, 'max_cap': 300.0, 'Var_Cost': 0.4, 'Fix_Cost': 0.00058},
           'Plant 3': {'min_cap': 100.0, 'max_cap': 2500.0, 'Var_Cost': 1.83, 'Fix_Cost': -0.00178425},
           'Plant 4': {'min_cap': 100.0, 'max_cap': 4000.0, 'Var_Cost': 2.74, 'Fix_Cost': 0.012124500000000002}},
....

'Group N':{'Plant 1': {'min_cap': 100.0, 'max_cap': 2200.0,'Var_Cost': 0.75, 'Fix_Cost': 0.0029625000000000003},
           'Plant 2': {'min_cap': 50.0, 'max_cap': 300.0, 'Var_Cost': 0.4, 'Fix_Cost': 0.00058},
           'Plant 3': {'min_cap': 100.0, 'max_cap': 2500.0, 'Var_Cost': 1.83, 'Fix_Cost': -0.00178425},
           'Plant 4': {'min_cap': 100.0, 'max_cap': 4000.0, 'Var_Cost': 2.74, 'Fix_Cost': 0.012124500000000002}}
}

I tried:

C = Group1,Group2

However that does not give me the name of each group in the above structure.


Solution

  • This is possible with an iteration (N times) in a dictionary comprehension:

    d = {'Plant 1': {'min_cap': 100.0, 'max_cap': 2200.0,'Var_Cost': 0.75, 'Fix_Cost': 0.0029625000000000003}, 'Plant 2': {'min_cap': 50.0, 'max_cap': 300.0, 'Var_Cost': 0.4, 'Fix_Cost': 0.00058}, 'Plant 3': {'min_cap': 100.0, 'max_cap': 2500.0, 'Var_Cost': 1.83, 'Fix_Cost': -0.00178425}, 'Plant 4': {'min_cap': 100.0, 'max_cap': 4000.0, 'Var_Cost': 2.74, 'Fix_Cost': 0.012124500000000002}}
    
    N = 4       # N is 4 here as an example
    groups = {f'Group {i}': d for i in range(1, N+1)}