Вложенный словарь из нескольких списков с питоном - PullRequest
0 голосов
/ 08 мая 2018

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

main_0 = ['Main_0']
main_1 = ['Main_1']
main_2 = ['Main_2']

level_0 = ['LEVEL0',
           'LEVEL0_1',
           'LEVEL0_2']
level_1 = ['LEVEL1',
           'LEVEL1_1']
level_2 = ['LEVEL2']

val_0 = [1, 2, 3]
val_1 = [10, 20]
val_2 = [52]

И я хочу создать вложенный словарь, подобный следующему:

{'Main_0' : {'LEVEL0' : 1,
             'LEVEL0_1' : 2,
             'LEVEL0_2' : 3},
 'Main_1' : {'LEVEL1' : 10,
             'LEVEL1_1' : 20},
 'Main_2' : {'LEVEL2' : 52}}

Это вообще возможно, или я должен решить эту проблему с другой структурой данных? Какой в ​​этом случае?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

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

In [195]: mains = [main_0, main_1, main_2]

In [196]: levels = [level_0, level_1, level_2]

In [197]: vals = [val_0, val_1, val_2]

In [200]: {m[0]: {l: v for l, v in zip(ll, vv) } for m, ll, vv in zip(mains, lev
     ...: els, vals)}
Out[200]: 
{'Main_0': {'LEVEL0': 1, 'LEVEL0_1': 2, 'LEVEL0_2': 3},
 'Main_1': {'LEVEL1': 10, 'LEVEL1_1': 20},
 'Main_2': {'LEVEL2': 52}}
0 голосов
/ 08 мая 2018

Просто переберите каждый из этих списков и создайте хеш:

mains = main_0 + main_1 + main_2
levels = [level_0, level_1, level_2]
values = [val_0, val_1, val_2]

result = {}
for main_index, main in enumerate(mains):
    level_result = {}
    for level_index, level in enumerate(levels[main_index]):
        value = values[main_index][level_index]
        level_result[level] = value
    result[main] = level_result

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