One could use dotsi, for full list, dict and recursive support, with some extension methods
pip install dotsi
and
>>> import dotsi>>> >>> d = dotsi.Dict({"foo": {"bar": "baz"}}) # Basic>>> d.foo.bar'baz'>>> d.users = [{"id": 0, "name": "Alice"}] # List>>> d.users[0].name'Alice'>>> d.users.append({"id": 1, "name": "Becca"}); # Append>>> d.users[1].name'Becca'>>> d.users += [{"id": 2, "name": "Cathy"}]; # `+=`>>> d.users[2].name'Cathy'>>> d.update({"tasks": [{"id": "a", "text": "Task A"}]});>>> d.tasks[0].text'Task A'>>> d.tasks[0].tags = ["red", "white", "blue"];>>> d.tasks[0].tags[2];'blue'>>> d.tasks[0].pop("tags") # `.pop()`['red', 'white', 'blue']>>> >>> import pprint>>> pprint.pprint(d){'foo': {'bar': 'baz'},'tasks': [{'id': 'a', 'text': 'Task A'}],'users': [{'id': 0, 'name': 'Alice'}, {'id': 1, 'name': 'Becca'}, {'id': 2, 'name': 'Cathy'}]}>>> >>> type(d.users) # dotsi.Dict (AKA dotsi.DotsiDict)<class 'dotsi.DotsiList'>>>> type(d.users[0]) # dotsi.List (AKA dotsi.DotsiList)<class 'dotsi.DotsiDict'> >>>