class Dict(dict): def __init__(self, *args, vivifier=lambda k: None, **kwargs): self.vivifier = vivifier dict.__init__(self, *args, **kwargs) def __getitem__(self, key): if key not in self: dict.__setitem__(self, key, self.vivifier(key)) return dict.__getitem__(self, key)