Я хотел бы получить вложенный словарь из строки, которая может быть разделена разделителем, :.

s='A:B:C:D'
v=['some','object']
desired={'A':{'B':{'C':{'D':v}}}}

Есть ли "питонический" способ создать это?

-2
kdb 25 Янв 2021 в 22:08

2 ответа

Лучший ответ

Для этого вы можете написать рекурсивную функцию:

>>> s = 'A:B:C:D'
>>> v = ['some','object']
>>> def generate_dict(keys, val):
...     if len(keys) == 1:
...             return {keys[0]: val}
...     return {keys[0]:generate_dict(keys[1:], val)}
...
>>> generate_dict(s.split(':'), v)
{'A': {'B': {'C': {'D': ['some', 'object']}}}}
1
Asocia 25 Янв 2021 в 19:17

Вот итеративное решение:

result = {}
s = 'A:B:C:D'
delimiter = ":"
value = ['some', 'object']

temp = result
key_list = s.split(delimiter)

for i, key in enumerate(key_list):
    if i != len(key_list) - 1:
        temp[key] = {}
        temp = temp[key]
        continue

    temp[key] = value


print(result)

1
dukkee 25 Янв 2021 в 19:19
65890917