On Tue, 25 Feb 2014 15:03:51 -0600, Tim Chase wrote: > On 2014-02-25 14:40, Skip Montanaro wrote: >> What's the correct result of evaluating this expression? >> >> {'A': 1} | {'A': 2} >> >> I can see (at least) two possible "correct" answers. > > I would propose at least four: > > {'A': 1} # choose the LHS > {'A': 2} # choose the RHS > {'A': (1,2)} # a resulting pair of both
Should that value be a tuple, a list or a set? > set(['A']) # you did set-ops, so you get a set Option 5: raise an exception if the values are different. Option 6: "or" the values, so that the LHS value is used only if it is truthy, otherwise the RHS value is used. That is: {'A': leftdict['A'] or rightdict['A']} I don't really understand the use-case behind Option 6, but there is a recent thread on python-id...@python.org where somebody proposed that as the Obviously One True And Correct behaviour for dict intersection. > If dicts were to support set ops, the last one would be my preferred > result. What, getting a set back? No, I disagree. If you want a set, it's easy to do: dicta.keys() | dictb.keys() (In Python 2, use viewkeys instead.) gives you a set of the intersection of the keys. The only point of having dicts support set-like operations directly is if you get a dict back. All of these operations are quite simple to write, so personally I would recommend people just add their own helper function with the behaviour they prefer. -- Steven -- https://mail.python.org/mailman/listinfo/python-list