On Mon, Dec 1, 2014 at 1:19 PM, Ethan Furman <et...@stoneleaf.us> wrote: > On 12/01/2014 10:05 AM, Larry Martell wrote: >> >> Is there a way to set the default_factory of defaultdict so that >> accesses to undefined keys get to set to the key? > > You need to subclass and modify __missing__ to actually pass along the key: > > --> class defaultdictkey(defaultdict): > ... def __missing__(self, key): > ... self[key] = self.default_factory(key) > ... return self[key] > ... > > and in action: > > --> huh = defaultdictkey(lambda k: k) > --> huh > defaultdict(<function <lambda> at 0x7fe1305de3f0>, {}) > --> huh['x'] > 'x' > --> huh['x'] > 'x' > --> huh.get('y') > --> huh['y'] > 'y' > --> huh.get('y') > 'y'
I spoke too soon: >>> class defaultdictkey(defaultdict): ... def __missing__(self, key): ... self[key] = self.default_factory(key) ... >>> x = defaultdictkey(lambda k: k) >>> print x['aaa'] None >>> print x['aaa'] aaa >>> a = x['qqq'] >>> print a None -- https://mail.python.org/mailman/listinfo/python-list