On Sat, 31 Jul 2010 01:02:47 -0400, wheres pythonmonks wrote:
>> Hint -- what does [].append(1) return? >> >> > Again, apologies from a Python beginner. It sure seems like one has to > do gymnastics to get good behavior out of the core-python: > > Here's my proposed fix: > > m['key'] = (lambda x: x.append(1) or x)(m.get('key',[])) > > Yuck! Yuk is right. What's wrong with the simple, straightforward solution? L = m.get('key', []) L.append(1) m['key'] = L Not everything needs to be a one-liner. But if you insist on making it a one-liner, that's what setdefault and defaultdict are for. > So I guess I'll use defaultdict with upcasts to dict as needed. You keep using that term "upcast". I have no idea what you think it means, so I have no idea whether or not Python does it. Perhaps you should explain what you think "upcasting" is. > On a side note: does up-casting always work that way with shared > (common) data from derived to base? (I mean if the data is part of > base's interface, will b = base(child) yield a new base object that > shares data with the child?) Of course not. It depends on the implementation of the class. -- Steven -- http://mail.python.org/mailman/listinfo/python-list