Преобразовать список в словарь

Как из списка:

['2018-01-01', 'yandex', 'cpc', 100]

сделать такой словарь?:

{'2018-01-01': {'yandex': {'cpc': 100}}}

Ответы (3 шт):

Автор решения: nomnoms12

Решение через рекурсию для произвольного количества элементов:

def get_d(li: list) -> dict:
    if len(li) == 1:
        return li[0]
    return {li[0]: get_d(li[1:])}


li = ['2018-01-01', 'yandex', 'cpc', 100]
print(get_d(li))

stdout:

{'2018-01-01': {'yandex': {'cpc': 100}}}
→ Ссылка
Автор решения: extrn

Через левую свертку (за неимением правой)

from functools import reduce

data = ['2018-01-01', 'yandex', 'cpc', 100]

print(reduce(lambda val, key: {key: val}, reversed(data)))
{'2018-01-01': {'yandex': {'cpc': 100}}}
→ Ссылка
Автор решения: Pavel Durmanov
In [17]: l = ['2018-01-01', 'yandex', 'cpc', 100]

In [18]: last = l.pop()

In [19]: for i in reversed(l):
    ...:     last = {i: last}
    ...:

In [20]: last
Out[20]: {'2018-01-01': {'yandex': {'cpc': 100}}}
→ Ссылка