Как создать вложенный словарь?

Вот из этого

['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]))
→ Ссылка