Если все повторяемые фрагменты одинаковой длины, вы можете использовать zip()
с пониманием речи :
items = node, a, b, c
result = {n: {'a': a_, 'b': b_, 'c': c_} for n, a_, b_, c_ in zip(*items)}
# {0: {'a': (20, 10), 'b': 1, 'c': 0}, 1: {'a': (0, 10), 'b': 0, 'c': 1}, 2: {'a': (4, 5), 'b': 0, 'c': 0}, 3: {'a': (6, 2), 'b': 0, 'c': 0}, 4: {'a': (1, 4), 'b': 0, 'c': 1}}
Что также можно записать так:
items = node, a, b, c
keys = 'a', 'b', 'c'
result = {x[0]: dict(zip(keys, x[1:])) for x in zip(*items)}
Возможно, вы также можете использовать map()
здесь:
items = node, a, b, c
keys = 'a', 'b', 'c'
result = dict(map(lambda x: (x[0], dict(zip(keys, x[1:]))), zip(*items)))