[Python-ideas] dict '+' operator and slicing support for pop
George Sakkis
george.sakkis at gmail.com
Tue Mar 17 17:03:16 CET 2009
On Tue, Mar 17, 2009 at 11:00 AM, Andrii V. Mishkovskyi
<mishok13 at gmail.com> wrote:
> 1. Add ability to use '+' operator for dicts
>
> I often wonder why list and tuple instances have '+' and '+='
> operators but dicts don't?
> It's not that rare in my code (and code written by others, as it
> seems) that i have to write:
>
> a.update(b)
> return a
>
> I do understand that adding additional magic method may be
> inappropriate for dict, but I think it would be nice addition to a
> language. So, my proposal is that:
>
> x = a + b
> would become equivalent to
> x = dict(a, **b)
>
> a += b
> would become equivalent to
> a.update(b)
That's one way to define dict addition but it's not the only, or even,
the best one. It's hard to put in words exactly why but I expect "a+b"
to take into account the full state of the operands, not just a part
of it. In your proposal the values of the first dict for the common
keys are effectively ignored, which doesn't seem to me as a good fit
for an additive operation. I would find at least as reasonable and
intuitive the following definition that doesn't leak information:
def sum_dicts(*dicts):
from collections import defaultdict
s = defaultdict(list)
for d in dicts:
for k,v in d.iteritems():
s[k].append(v)
return s
>>> d1 = {'a':2,'b':5}
>>> d2 = {'a':2,'c':6,'z':3}
>>> d3 = {'b':2,'c':5}
>>> sum_dicts(d1,d2,d3)
defaultdict(<type 'list'>, {'a': [2, 2], 'c': [6, 5], 'b': [5, 2], 'z': [3]})
George
More information about the Python-ideas
mailing list