The answer of @derek73 is very neat, but it cannot be pickled nor (deep)copied, and it returns None
for missing keys. The code below fixes this.
Edit: I did not see the answer above that addresses the exact same point (upvoted). I'm leaving the answer here for reference.
class dotdict(dict): __setattr__ = dict.__setitem__ __delattr__ = dict.__delitem__ def __getattr__(self, name): try: return self[name] except KeyError: raise AttributeError(name)