Paul McGuire wrote:
> Another factor to consider is if "default" is not something simple like 0 or > None, but is an object constructed and initialized with some expensive > initialization code (like access to a database). In this case: > > dict.get(key, ExpensiveObjectToCreate()) > > always creates the default value, and if the key does not exist, then > promptly drops it on the floor. > > In such a case you'd be better off with one of the "check for existence" > patterns, which only creates the default value if you *know* you're going to > need it. unless you're targeting 2.5 or later, in which case you can use the defaultdict class: >>> import collections >>> def ExpensiveObjectToCreate(): ... print "creating an expensive object" ... return "expensive object" ... >>> d = collections.defaultdict(ExpensiveObjectToCreate) >>> d["key"] creating an expensive object 'expensive object' >>> d["key"] 'expensive object' or, if you prefer, the new __missing__ hook: >>> class mydict(dict): ... def __missing__(self, key): ... print "add new object base on", key ... value = "new object" ... self[key] = value ... return value ... >>> d = mydict() >>> d["key"] add new object base on key 'new object' >>> d["key"] 'new object' </F> -- http://mail.python.org/mailman/listinfo/python-list