Использование reduce()
function для доступа и установки элементов:
try:
# Python 3 moved reduce to the functools module
from functools import reduce
except ImportError:
# Python 2 reduce is a built-in
pass
def get_target(d, keys):
return reduce(lambda d, k: d.setdefault(k, {}), keys, d)
def set_target(d, keys, value):
parent = get_target(d, keys[:-1])
parent[keys[-1]] = value
result = {}
set_target(result, yourlist[:-1], yourlist[-1])
Функции get_target()
и set_target()
повторно использовать на уже построенных вложенных структур, они не ограничены к созданию словаря с нуля. Я адаптировал get_target()
от earlier, related post.
Демо:
>>> def get_target(d, keys):
... return reduce(lambda d, k: d.setdefault(k, {}), keys, d)
...
>>> def set_target(d, keys, value):
... parent = get_target(d, keys[:-1])
... parent[keys[-1]] = value
...
>>> result = {}
>>> yourlist = ['item1', 'item2', 'item3', 'item4']
>>> set_target(result, yourlist[:-1], yourlist[-1])
>>> result
{'item1': {'item2': {'item3': 'item4'}}}
Связанный: [питон доступа к вложенным словарные элементы через список ключей] (http://stackoverflow.com/q/14692690) –