Вы можете просто использовать split('.', 1)
, чтобы последовательно отделить первую часть от остальных и передать ее в свой рекурсивный вызов:
def dictify(s):
if '.' not in s:
return s
key, rest = s.split('.', 1)
return {key: dictify(rest)}
Тестирование:
>>> dictify('a.b.c.d')
{'a': {'b': {'c': 'd'}}}
Если вы хотите, чтобы на последнем уровне также был пустой дикт, вместо того, чтобы быть просто значением, вы можете изменить return s
в первой части на return {s: {}}