On Tue, Feb 17, 2015 at 10:08 PM, Stephen J. Turnbull <stephen@xemacs.org> wrote:
C Anthony Risinger writes:

 > I'm not versed enough in the math behind it to know if it's expected or
 > not, but as it stands, to remain compatible with sets, `d1 | d2` should
 > behave like it does in my code (prefer the first, not the last).  I kinda
 > like this, because it makes dict.__or__ a *companion* to .update(), not a
 > replacement (since update prefers the last).

But this is exactly the opposite of what the people who advocate use
of an operator want.  As far as I can see, all of them want update
semantics, because that's the more common use case where the current
idioms feel burdensome.

True... maybe that really is a good case for the + then, as something like .update().

Personally, I think making dict be more set-like is way more interesting/useful, because of the *filtering* capabilities:

# drop keys
d1 -= (keys_ignored, ...)

# apply [inverted] mask
d1 &= (keys_required, ...)
d1 ^= (keys_forbidden, ...)

__or__ would still work like dict.viewkeys.__or__, and behaves like a bulk .setdefault() which is another neat property:

# same as looping d2 calling d1.setdefault(...)
d1 |= d2

Using + for the .update(...) case seems nice too :)

--

C Anthony