On Aug 16, 8:28 pm, Jonathan Gardner <[EMAIL PROTECTED]> wrote: > On Aug 16, 3:35 pm, beginner <[EMAIL PROTECTED]> wrote: > > > > > In perl it is just one line: $a=$b->{"A"} ||={}. > > a = b.setdefault('A', {}) > > This combines all two actions together: > - Sets b['A'] to {} if it is not already defined > - Assigns b['A'] to a > > More info on dict methods here: > > http://docs.python.org/lib/typesmapping.html
No, this has already been proposed and discarded. The OP does NOT want this, because it always generates an empty {} whether it is needed or not. Not really a big hardship, but if the default value were some expensive-to-construct container class, then you would be creating one every time you wanted to reference a value, on the chance that the key did not exist. Carl Banks' post using defaultdict is the correct solution. The raison d'etre for defaultdict, and the reason that it is the solution to the OP's question, is that instead of creating a just-in-case default value every time, the defaultdict itself is constructed with a factory method of some kind (in practice, it appears that this factory method is usually the list or dict class constructor). If a reference to the defaultdict gives a not-yet-existing key, then the factory method is called to construct the new value, that value is stored in the dict with the given key, and the value is passed back to the caller. No instances are created unless they are truly required for initializing an entry for a never-before-seen key. -- Paul -- http://mail.python.org/mailman/listinfo/python-list