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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4