On Mon, Jun 7, 2010 at 2:17 PM, kkumer <kku...@best-search-engines-mail.com> wrote: > > I have to merge two dictionaries into one, and in > a "shallow" way: changing items should be possible > by operating either on two parents or on a > new dictionary. I am open to suggestions how > to do this (values are always numbers, BTW), but > I tried to do it by creating a dict-like class that just > forwards all calls to the two parent dicts, see below. > > It works, but one important thing is missing. I > am not able to expand new dictionary with > double-star operator ** to use it as a > set of keyword arguments of a function. > I googled a bit, but was unable to find what > property must an object have to be correctly > treated by **.
I don't think that what you want to do here is possible. It appears to be hard-coded and not affected by subclassing, as evidenced by the following snippet: class NonDict(dict): for attr in dict.__dict__: if attr not in ('__init__', '__new__',): locals()[attr] = None d = NonDict({'a': 1}) def kwa(**kw): print kw kwa(**d) Prints: {'a': 1} Cheers, Ian -- http://mail.python.org/mailman/listinfo/python-list