Вы также можете использовать рекурсию с более простым циклом:
l1 = ['a','b']
l2 = ['1', '2', '3']
l3 = ['d','e']
def combinations(d):
return {i:combinations(d[1:]) if d[1:] else 0 for i in d[0]}
print(combinations([l1, l2, l3]))
Выход:
{'b': {'1': {'d': 0, 'e': 0}, '2': {'d': 0, 'e': 0}, '3': {'d': 0, 'e': 0}}, 'a': {'1': {'d': 0, 'e': 0}, '2': {'d': 0, 'e': 0}, '3': {'d': 0, 'e': 0}}}
Редактировать: true one-liner:
print((lambda d:{i:combination(d[1:]) if d[1:] else 0 for i in d[0]})([l1, l2, l3]))
Output:
{'b': {'1': {'d': 0, 'e': 0}, '2': {'d': 0, 'e': 0}, '3': {'d': 0, 'e': 0}}, 'a': {'1': {'d': 0, 'e': 0}, '2': {'d': 0, 'e': 0}, '3': {'d': 0, 'e': 0}}}