defaultdict's bug or feature?

MRAB google at mrabarnett.plus.com
Thu May 21 08:41:56 EDT 2009


Red Forks wrote:
> from collections import defaultdict
> 
> d = defaultdict(set)
> assert isinstance(d['a'], set)
> assert isinstance(d.get('b'), set)
> 
> d['a'] is ok, and a new set object is insert to d, but d.get('b') won't.
> 
> It's a bug, or just a feature?
> 
A feature.

> I think dict.get() method is just a /safe/ version of dict[key], maybe 
> it should be:
>  
> def get(self, key, default = None):
>   try:
>     return self[key]
>   except KeyError:
>     return default
> 
Isn't that what it does already?


With dict you have the choice of whether to raise an exception or return 
a default value if the key is missing.

With defaultdict you have the choice of whether to add the value or
return a default value if the key is missing.

Both classes have their uses.



More information about the Python-list mailing list