Setting default_factory of defaultdict to key

Larry Martell larry.martell at gmail.com
Mon Dec 1 13:29:33 EST 2014


On Mon, Dec 1, 2014 at 1:19 PM, Ethan Furman <ethan at 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



More information about the Python-list mailing list