Setting default_factory of defaultdict to key

Larry Martell larry.martell at gmail.com
Mon Dec 1 13:41:28 EST 2014


On Mon, Dec 1, 2014 at 1:36 PM, Ethan Furman <ethan at stoneleaf.us> wrote:
> On 12/01/2014 10:29 AM, Larry Martell wrote:
>> 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)
>
> You missed the third line here ^
>
>   ...   return self[key]

Oops! Thanks. Working now.



More information about the Python-list mailing list