Как создать вложенный словарь?
Вот из этого
['2018-01-01', 'yandex', 'cpc', 100]
Надо получить вот это
{'2018-01-01': {'yandex': {'cpc': 100}}}
Причем список может расширяться до бесконечности. Подскажите плиз чего почитать хоть?
Ответы (3 шт):
Автор решения: Chorkov
→ Ссылка
Прочитать: (1) рекурсия. (2) slicing.
def to_dict(l):
if len(l) == 2 :
return { l[0] : l[1] }
else:
return { l[0] : to_dict( l[1:] ) }
Автор решения: CrazyElf
→ Ссылка
Чуть более элегантное на мой взгляд решение, через рекурсию и распаковку:
def to_dict(list_: list):
first, *rest = list_
return {first: to_dict(rest)} if rest else first
lst = ['2018-01-01', 'yandex', 'cpc', 100]
print(to_dict(lst))
Плюс красивый вариант @insolor без рекурсии в переделке на тот же лад с распаковкой:
def to_dict(list_: list):
result, *rest = reversed(list_)
for i in rest:
result = {i: result}
return result
Автор решения: insolor
→ Ссылка
Без рекурсии - просто итерируемся от конца списка, каждый предыдущий частичный результат оборачиваем в новый словарь:
def to_dict(s: list):
result = s[-1]
for i in reversed(range(len(s) - 1)):
result = {s[i]: result}
return result
print(to_dict(['2018-01-01', 'yandex', 'cpc', 100]))