Как объединить несколько словарей в один из более высоких измерений? - PullRequest
0 голосов
/ 10 января 2020

У меня есть несколько словарей следующим образом:

{
    '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 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}}
}

Я пытался:

C = Group1,Group2

Однако это не дает мне название каждой группы в выше структура.

Ответы [ 2 ]

1 голос
/ 10 января 2020

Это возможно с итерацией (N раз) в словаре:

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)}
0 голосов
/ 10 января 2020

Я думаю, что вы просто хотите новый словарь, где новые ключи - это "группа% d" для каждого. Содержимое идентично?

Если ваш оригинальный диктант называется plant_dict, то вы хотите что-то вроде:

group_dict = { f'group {idict+1}': plant_dict.copy() for idict in range(n) }

Обратите внимание на +1, так как ваша нумерация начинается с 1, а не 0 и copy, так что каждый из них на самом деле является отдельным dict - вероятно, тем, что вы хотите.

Если у вас действительно есть какой-то массив plant_dict s (назовите его plant_dicts), тогда вы можете сделать

group_dict = { f'group {idict+1}': pd for idict, pd in enumerate(plant_dicts) }

Это словарь для понимания , который создает новые словари с ключами и значениями, заданными тем, что находится по обе стороны от :.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...