Setting default_factory of defaultdict to key

Larry Martell larry.martell at gmail.com
Mon Dec 1 13:23:47 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'

Perfect. Thanks much.



More information about the Python-list mailing list