[Python-Dev] Proposal: defaultdict

Nick Coghlan ncoghlan at gmail.com
Fri Feb 17 15:46:45 CET 2006


Adam Olsen wrote:
>> Over lunch with Alex Martelli, he proposed that a subclass of dict
>> with this behavior (but implemented in C) would be a good addition to
>> the language. It looks like it wouldn't be hard to implement. It could
>> be a builtin named defaultdict. The first, required, argument to the
>> constructor should be the default value. Remaining arguments (even
>> keyword args) are passed unchanged to the dict constructor.
>> -1 (atleast until you can explain why that's better than .getorset())

Because the "default default" is a fundamental characteristic of the default 
dictionary (meaning it works with normal indexing syntax), whereas "getorset" 
makes it a characteristic of the method call.
Besides, if there are going to be any method changes on normal dicts, I'd 
rather see a boolean third argument "set" to the get method.
That is (for a normal dict):
 def get(self, key, *args):
 set = False
 no_default = False
 if len(args) == 2:
 default, set = args
 elif args:
 default, = args
 else:
 no_default = True
 if key in self:
 return self[key]
 if no_default:
 raise KeyError(repr(key))
 if set:
 self[key] = default
 return default
Using Guido's original example:
 d.get(key, [], True).append(value)
I don't really think this is a replacement for defaultdict, though.
Cheers,
Nick.
-- 
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
---------------------------------------------------------------
 http://www.boredomandlaziness.org


More information about the Python-Dev mailing list

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