2014-09-08 2 views
3

Самый вещий способ преобразования:Преобразование списка в вложенный словарь?

A = [a1, a2, a3, a4, a5] 

, где «А» может быть списком с любым количеством элементов

B = {a1: {a2: {a3: {a4: {a5: y}}}}} 

где у какой-либо переменной.

+1

* Создание * вложенные словари или просто * * перемещения существующих индексный граф объекта? – user2864740

+0

создание вложенного словаря – 2014-09-08 07:10:57

+0

, но что вы подразумеваете под «простым пересечением существующего индексаемого графа объектов» – 2014-09-08 07:18:38

ответ

3
def build_dict(A, y): 
    for s in reversed(A): 
     y = {s: y} 
    return y 

A = ['a1', 'a2', 'a3', 'a4', 'a5'] 
y = 'some value' 
print(build_dict(A, y)) 

выход:

{'a1': {'a2': {'a3': {'a4': {'a5': 'some value'}}}}} 

Альтернатива использованием reduce (functools.reduce в Python 3.x):

>>> A = ['a1', 'a2', 'a3', 'a4', 'a5'] 
>>> y = 'some value' 
>>> reduce(lambda x, s: {s: x}, reversed(A), y) 
{'a1': {'a2': {'a3': {'a4': {'a5': 'some value'}}}}} 
+0

nice, я использовал рекурсию, это выглядит намного лучше – 2014-09-08 07:25:23

+0

@abstract, Я добавил альтернативу, которая использует 'reduce'. – falsetru

Смежные вопросы