On 12 February 2015 at 09:52, Stephen J. Turnbull <stephen@xemacs.org> wrote:
I'm a definite -1 on "+" or "|" for dicts.  "+=" or "|=" I can live
with as alternative spellings for "update", but they're both pretty
bad, "+" because addition is way too overloaded (even in the shopping
list context) and I'd probably think it means different things in
different contexts, and "|" because the wrong operand wins in
"short-circuit" evaluation.

Would this be less controversial if it were a new method rather than an odd use of an operator? I get the impression that most of the objections are especially against using an operator.

While I think the operator is elegant, I would be almost as happy with a method, e.g. updated(). It also makes the semantics very clear when e.g. Counter objects are involved:

new = a.updated(b)
# equivalent to
new = a.copy()
new.update(b)

It would also be nice to be able to pass multiple dictionaries like a.updated(b, c), to avoid repeated copying in a.updated(b).updated(c).

Or perhaps even a classmethod:

dict.merged(a, b, c)

Thomas