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'}}}