I wanted to ask this here because what I wanted to originally do felt like a really Pythonic method. I want to be able to use the syntax: d = {'apple':{'cranberry':{'banana':{'chocolate':[1,2,3,4,5,6]}}},'b':2} with d['apple']['cranberry']['banana']['chocolate'] as item: for i in item: print(i) item.append('k') but found that Python doesn't allow for using lists, dicts, etc. as context managers. So I implemented my own: def context_wrap(target): class ContextWrap: def __init__(self, tgt): self._tgt = tgt def __enter__(self): return self._tgt def __exit__(self, type, value, traceback): pass return ContextWrap(target) if __name__ == '__main__': with context_wrap({'a':1}) as item: print(item['a']) with context_wrap([1,2,3,4,5]) as item: print(item[1]) with context_wrap(3) as item: print (item) In the above code, you can take any random object and wrap it inside an object that acts as a context manager controlling the underlying object. This means that inside any `with` clause, you can simply use the object with its alias. I feel like it looks a lot cleaner and clearer than something like: alias = d['apple']['cranberry']['banana']['chocolate'] for i in alias: print(i) alias.append('k') I wanted to know if there was a more "Pythonic" way to do it. So the improvement that I'm looking for is in terms of better reliance on the standard Python library and/or in terms of my syntax.