magical expanding hash

Steven D'Aprano steve at
Wed Jan 18 06:23:29 EST 2006

On Tue, 17 Jan 2006 18:00:00 -0700, Steven Bethard wrote:

> Steve Holden wrote:
>> Steven Bethard wrote:
>>> Agreed.  I really hope that Python 3.0 applies Raymond Hettinger's 
>>> suggestion "Improved default value logic for Dictionaries" from
>>> This would allow you to make the setdefault() call only once, instead 
>>> of on every lookup:
>>>      class meh(dict):
>>>          def __init__(self, *args, **kwargs):
>>>              super(meh, self).__init__(*args, **kwargs)
>>>              self.setdefault(function=meh)
>>> STeVe
>> In fact, why not go one better and also add a "default" keyword 
>> parameter to dict()?
> It's not backwards compatible:
>  >>> dict(default=4)
> {'default': 4}
> And I use the **kwargs form of the dict constructor often enough to hope 
> that it doesn't go away in Python 3.0.

I don't like the idea of all dicts having default values. Sometimes you
don't want a default value, you want an exception when the key isn't in
the dict.

And even if you do want defaults, sometimes you want a default which is
global to the dict, and sometimes you want a default which depends on the
key. More of a "missing value" than a default.

I vote to leave dict just as it is, and add a subclass, either in a module
or as a built in (I'm not fussed either way) for dicts-with-defaults.


More information about the Python-list mailing list