2014-10-23 4 views
0

У меня есть диктат dict, который я бы хотел преобразовать в dict of dict, объединив ключи двух внешних уровней. Есть ли элегантный способ сделать это?преобразовать словарь словарей словарей в словарь словарей

Вот начальная ДИКТ:

alldic={} 
for a in range(3): 
    machinedic={} 
    for x in range(5): 
     machinetimedic={} 
     for i in range(4): 
      machinetimedic["variable0"]=0 
      machinetimedic["variable1"]=1 
     machinedic["time "+str(x)]=machinetimedic 
    alldic["machine "+str(a)]=machinedic 

То, что я хотел бы иметь это ДИКТ из Словаря, который идет так:

{'machine 0-time 0': {'variable0': 0, 'variable1': 1}, 
    'machine 0-time 1': {'variable0': 0, 'variable1': 1}, 
    'machine 0-time 2': {'variable0': 0, 'variable1': 1}, 
    'machine 0-time 3': {'variable0': 0, 'variable1': 1}, 
    'machine 0-time 4': {'variable0': 0, 'variable1': 1}, 
    'machine 1-time 0': {'variable0': 0, 'variable1': 1}, 
    'machine 1-time 1': {'variable0': 0, 'variable1': 1}, 
    'machine 1-time 2': {'variable0': 0, 'variable1': 1}, 
    'machine 1-time 3': {'variable0': 0, 'variable1': 1}, 
    'machine 1-time 4': {'variable0': 0, 'variable1': 1}, 
    'machine 2-time 0': {'variable0': 0, 'variable1': 1}, 
    'machine 2-time 1': {'variable0': 0, 'variable1': 1}, 
    'machine 2-time 2': {'variable0': 0, 'variable1': 1}, 
    'machine 2-time 3': {'variable0': 0, 'variable1': 1}, 
    'machine 2-time 4': {'variable0': 0, 'variable1': 1}} 
+2

Хорошо ... но что у вас уже есть? –

ответ

1

Итерация прекрасно работает:

>>> all_new_dic = {} 
>>> for key in alldic: 
for k in alldic[key]: 
    new_key = key + '-' + k 
    all_new_dic[new_key] = alldic[key][k] 

>>> all_new_dic 
{'machine 1-time 4': {'variable1': 1, 'variable0': 0}, 'machine 1-time 0': {'variable1': 1,  'variable0': 0}, 'machine 1-time 1': {'variable1': 1, 'variable0': 0}, 'machine 1-time 2': {'variable1': 1, 'variable0': 0}, 'machine 1-time 3': {'variable1': 1, 'variable0': 0}, 'machine 2-time 4': {'variable1': 1, 'variable0': 0}, 'machine 2-time 1': {'variable1': 1, 'variable0': 0}, 'machine 2-time 0': {'variable1': 1, 'variable0': 0}, 'machine 2-time 3': {'variable1': 1, 'variable0': 0}, 'machine 2-time 2': {'variable1': 1, 'variable0': 0}, 'machine 0-time 3': {'variable1': 1, 'variable0': 0}, 'machine 0-time 2': {'variable1': 1, 'variable0': 0}, 'machine 0-time 1': {'variable1': 1, 'variable0': 0}, 'machine 0-time 0': {'variable1': 1, 'variable0': 0}, 'machine 0-time 4': {'variable1': 1, 'variable0': 0}} 
1

Вместо вложенности, просто расплющить его, как это

alldic={} 
for a in range(3): 
    machinedic={} 
    for x in range(5): 
     machinetimedic={} 
     for i in range(4): 
      machinetimedic["variable0"]=0 
      machinetimedic["variable1"]=1 
      alldic["machine {}-time {}".format(a, x)] = machinetimedic 

В качестве альтернативы, вы можете получить тот же результат со знанием словаря, например

>>> {"machine {}-time {}".format(a, x) : {"variable0": 0, "variable1" : 1} 
     for a in range(3) for x in range(5)} 
{'machine 0-time 0': {'variable0': 0, 'variable1': 1}, 
'machine 0-time 1': {'variable0': 0, 'variable1': 1}, 
'machine 0-time 2': {'variable0': 0, 'variable1': 1}, 
'machine 0-time 3': {'variable0': 0, 'variable1': 1}, 
'machine 0-time 4': {'variable0': 0, 'variable1': 1}, 
'machine 1-time 0': {'variable0': 0, 'variable1': 1}, 
'machine 1-time 1': {'variable0': 0, 'variable1': 1}, 
'machine 1-time 2': {'variable0': 0, 'variable1': 1}, 
'machine 1-time 3': {'variable0': 0, 'variable1': 1}, 
'machine 1-time 4': {'variable0': 0, 'variable1': 1}, 
'machine 2-time 0': {'variable0': 0, 'variable1': 1}, 
'machine 2-time 1': {'variable0': 0, 'variable1': 1}, 
'machine 2-time 2': {'variable0': 0, 'variable1': 1}, 
'machine 2-time 3': {'variable0': 0, 'variable1': 1}, 
'machine 2-time 4': {'variable0': 0, 'variable1': 1}} 
Смежные вопросы