dict.setdefault()

Raymond Hettinger python at rcn.com
Mon Apr 11 18:49:21 EDT 2011


On Apr 11, 2:35 pm, rantingrick <rantingr... at gmail.com> wrote:
> setdefault should take **kw args in the case of needing to set
> multiple defaults at one time. I would even settle for an *arg list if
> i had to. Anything is better than...
>> d.setdefault(blah, blah)
> d.setdefault(blah, blah)
> d.setdefault(blah, blah)
> d.setdefault(blah, blah)
> if blah is not blah:
>     d.setdefault(blah, blah)

I hate to feed a troll, but I'm curious when you see that pattern of
calls. The typical use case always makes immediate use of the value
returned by setdefault():
 d.setdefault(key, []).append()
The pattern you've shown would more typically be expressed like this:
 for key in multiple_defaults.items():
 if key, default_value not in d:
 d[key] = default_value
Or people sometimes use updates to get the same effect:
 result = multiple_defaults.copy()
 result.update(d)
Another approach is to use something like ChainMap() which has been
added to Python 3.3. http://docs.python.org/dev/library/collections.html#collections.ChainMap
 result = ChainMap(d, multiple_defaults)
Raymond


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /