On Mon, Dec 1, 2014 at 1:36 PM, Ethan Furman <et...@stoneleaf.us> wrote: > On 12/01/2014 10:29 AM, Larry Martell wrote: >> 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) > > You missed the third line here ^ > > ... return self[key]
Oops! Thanks. Working now. -- https://mail.python.org/mailman/listinfo/python-list