list comprehension
Duncan Booth
duncan.booth at invalid.invalid
Tue Jan 24 12:32:12 EST 2006
Patrick Maupin wrote:
> Duncan Booth wrote:
>
>> I prefer writing an 'if' statement here, Bryan prefers 'get', that's
>> just a choice of style. But 'setdefault' here, that has no style.
>
> Well, I'm often told I have no style, and I _did_ admit that it's an
> abuse of setdefault. However, I often use setdefault to populate
> nested dictionaries, or dictionaries of sets or lists, e.g.:
>
> for x, y in somebiglist:
> bigdict.setdefault(x,set()).add(y) # Strips duplicates
>
>
> for x, y in somebiglist:
> bigdict.setdefault(x,[]).append(y) # Preserves duplicates
>
> To my mind, this latter is so much cleaner and clearer than any of the
> alternatives that it just isn't funny:
Yes, but storing a mutable is a not unreasonable use of setdefault. What I
objected to was storing an immutable just to overwrite it immediately.
Also, while I agree it is shorter, I'm not convinced that it is much
cleaner, and it is likely to be slower if there are a lot of duplicates,
possibly a lot slower if the mutable object has much overhead on its
construction.
More information about the Python-list
mailing list