On Nov 18, 8:45 pm, Phlip <phlip2...@gmail.com> wrote: > Pythonistas: > > If everyone likes this post, then the code is a "snippet" for > community edification. Otherwise, it's a question: How to do this kind > of thing better? > > I want a dict() variant that passes these test cases: > > map = Map() > assert not(map.has_key('_default')) > > map = Map(yo='dude') > assert map['yo'] == 'dude' > assert map.yo == 'dude' > assert None == map['whatever'] > assert not(map.has_key('_default')) > > map = Map(yo='dude', _default='q') > assert 'q' == map['whatever'] > assert not(map.has_key('_default')) > > That's like Bunch, but with a default value. (That makes code with > excess if statements less likely.) > > So here's the implementation: > > def Map(*args, **kwargs): > value = kwargs.get('_default', None) > if kwargs.has_key('_default'): del kwargs['_default'] > > class _DefMap(dict): > def __init__(self, *a, **kw): > dict.__init__(self, *a, **kw) > self.__dict__ = self > > def __getitem__(self, key): > if not self.has_key(key): self[key] = value > return dict.__getitem__(self, key) > > return _DefMap(*args, **kwargs) > > -- > Phlip > http://bit.ly/ZeekLand
Looks like some combination of defaultdict and namedtuple. -- http://mail.python.org/mailman/listinfo/python-list