Using the reduce()
function to access and set elements:
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])
The get_target()
and set_target()
functions are re-usable on already-built nested structures, they are not limited to building a dictionary from scratch. I adapted get_target()
from an earlier, related post.
Demo:
>>> 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'}}}