On Fri, Feb 21, 2014 at 05:05:58PM +0100, Markus Unterwaditzer wrote: [...]
It seems that everybody misses the part of the OP where he states that conflict resolution shouldn't happen via "one dict wins" but rather with the "or"-operator.
I certainly did :-( So we have *at least* four different ways to merge dictionaries a and b: # 1: a wins c = b.copy() c.update(a) # 2: b wins c = a.copy() c.update(b) # 3: choose a winner according to the `or` operator c = a.copy() for key, value in b.items(): if key in c: c[key] = c[key] or value else: c[key] = value # 4: keep both, in a list of 1 or 2 items c = {key:[value] for key, value in a.items()} for key, value in b.items(): if key in c and value != c[key][0]: c[key].append(value) else: c[key] = [value] The first three are special cases of a more general case, where you have a "decision function" that takes two values (one from dict a and the other from dict b) and decides which one to keep. Case 1 ("a always wins") would use `lambda x,y: x`, case 2 ("b wins") would use `lambda x,y: y` and case 3 would use operator.or_. The question is, why should any one of these be picked out as so obviously more useful than the others as to deserve being a dict method or operator support? -- Steven