[Python-Dev] dict.addlist()

Fred L. Drake, Jr. fdrake at acm.org
Tue Jan 20 10:11:07 EST 2004


Regarding d.setdefault(k, factory=list).append(v):

Moore, Paul writes:
 > How is it more expressive than d.setdefault(k, []).append(v)? As
 > far as I can see, it's longer and contains an extra obscure(ish)
 > term (factory).

The advantage I see is that it delays creation of the object being
used as the default value; no list is created unless needed, whereas
the setdefault() invocation shown always creates a new list, even if
it's going to be thrown away.  In many situations, if you're really
using a list, this doesn't matter, but in other cases, especially if
you're using a more complex object (or one with a more expensive
constructor), using the factory makes a lot of sense.

The idea that "factory" is an obscure term for Python programmers is
scary.

 > And I agree with the other posters that other defaults are often
 > useful, and further complicating the dictionary interface isn't
 > particularly helpful.

The basic setdefault() certainly remains useful on its own; I don't
think anyone suggested otherwise.

My objection is the complication of the dictionary interface; it has a
lot of methods now, and avoiding new names with highly specialized
meanings is good.

-1 for addlist(k, v)
-0 for setdefault(k, factory=...)

 > If conciseness is important,
 > 
 >     def addlist(d, k, v):
 >         d.setdefault(k, []).append(v)

Yep.  Or whatever variation makes sense in context.


  -Fred

-- 
Fred L. Drake, Jr.  <fdrake at acm.org>
PythonLabs at Zope Corporation



More information about the Python-Dev mailing list