[Python-ideas] The @update operator for dictionaries

Ian Foote ian at feete.org
Sat Mar 9 19:39:33 EST 2019


> It might also be worth considering YAML's own dict merge operator, the
> "<<" operator, as in https://yaml.org/type/merge.html as this is the
> existing Python's shift operator added to dict and will require no
> change to the synatx::
>
>   a = a << b


I really like this suggestion. It captures the asymmetry, since we could
have a = a >> b to merge with the other dictionary's keys taking precedence.

My instinct is that a = a << b would take b's values when keys collide and
a = a >> b would take a's values when keys collide. I'd be very interested
to know if this matches most peoples' intuitions.

On Sat, 9 Mar 2019 at 18:44, Meitham Jamaa <m at meitham.com> wrote:

> It might also be worth considering YAML's own dict merge operator, the
> "<<" operator, as in https://yaml.org/type/merge.html as this is the
> existing Python's shift operator added to dict and will require no
> change to the synatx::
>
>   a = a << b
>
> Meitham
>
>
> On 03/10, Chris Angelico wrote:
> > On Sun, Mar 10, 2019 at 3:16 AM Jonathan Fine <jfine2358 at gmail.com>
> wrote:
> > >
> > >  Anders Hovmöller wrote:
> > >
> > > > I don't understand what you mean. Can you provide examples that show
> the state of the dicts before and after and what the syntax would be the
> equivalent of in current python?
> > >
> > > If a.__radd__ exists, then
> > >     a += b
> > > is equivalent to
> > >     a = a.__radd__(b)
> > >
> > > Similarly, if a.__iat_update__ exists then
> > >     a @update= b
> > > would be equivalent to
> > >     a = a.__iat_update__(b)
> > >
> > > Here's an implementation
> > >     def __iat_update__(self, other):
> > >         self.update(other)
> > >         return self
> > >
> > > Thus, 'b' would be unchanged, and 'a' would be the same dictionary as
> > > before, but updated with 'b'.
> >
> > With something this long, how is it better from just writing:
> >
> > a = a.update_with(b)
> >
> > ? What's the point of an operator, especially if - by your own
> > statement - it will backward-incompatibly change the language grammar
> > (in ways that I've yet to understand, since you haven't really been
> > clear on that)?
> >
> > ChrisA
> >
>
> --
> Meitham Jamaa
>
> http://meitham.com
> GPG Fingerprint: 3934D0B2
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20190310/d2e3cfc9/attachment-0001.html>


More information about the Python-ideas mailing list