[Python-Dev] Proposal: defaultdict
Barry Warsaw
barry at python.org
Tue Feb 21 05:11:26 CET 2006
On Sat, 2006-02-18 at 12:53 +0100, Pierre Barbier de Reuille wrote:
> > Guido> Over lunch with Alex Martelli, he proposed that a subclass of
> > Guido> dict with this behavior (but implemented in C) would be a good
> > Guido> addition to the language.
I agree that .setdefault() is a well-intentioned failure, although I'm
much less concerned about any potential performance impact than the fact
that it's completely unreadable. And while I like the basic idea, I
also agree that deriving from dict is problematic, both because of the
constructor signature is tough to forward, but also because dict is such
a fundamental type that APIs that return dicts may have to be changed to
allow passing in a factory type.
I'd rather like to see what Pierre proposes, with a few minor
differences.
> Well, first not ot break the current interface, and second because I think it
> reads better I would prefer :
>
> d = {'a': 1}'
> d['b'] # raises KeyError
> d.get('c') # evaluates to None
> d.default = 42
> d['b'] # evaluates to 42
> d.get('c') # evaluates to 42
So far so good.
> And to undo the default, you can simply do :
>
> del d.default
Although this I'm not crazy about. If you let .default be a callable,
you could also write this as
def keyerror(): raise KeyError
d.default = keyerror
or possibly just this as a shortcut:
d.default = KeyError
> > The only question in my mind is whether or not getting a non-existent value
> > under the influence of a given default value should stick that value in the
> > dictionary or not.
Agreed. I'm not sure whether .get(onearg) should return None
or .default. I /think/ I want the latter, but I'd have to play with
some real code to know for sure.
-Barry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 307 bytes
Desc: This is a digitally signed message part
Url : http://mail.python.org/pipermail/python-dev/attachments/20060220/3adbcbd6/attachment.pgp
More information about the Python-Dev
mailing list