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.