从《辞典》到《辞典》

2024-09-29 22:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dict of dict of 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}}

Tags: of方法infortimerangemachinedict
2条回答

迭代效果非常好:

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

与其筑巢,不如像这样把它压扁

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

相关问题 更多 >

    热门问题