[prev in list] [next in list] [prev in thread] [next in thread]
List: python-ideas
Subject: Re: [Python-ideas] Joining dicts again
From: Mark Lawrence <breamoreboy () yahoo ! co ! uk>
Date: 2014-02-23 14:46:56
Message-ID: led1k2$b44$1 () ger ! gmane ! org
[Download RAW message or body]
On 23/02/2014 13:31, haael@interia.pl wrote:
>
> @Steven D'Aprano
>
> > So we have *at least* four different ways to merge dictionaries a and b:
> >
> > # 1: a wins
> > c = b.copy()
> > c.update(a)
> >
> >
> > # 2: b wins
> > c = a.copy()
> > c.update(b)
> >
> >
> > # 3: choose a winner according to the `or` operator
> > c = a.copy()
> > for key, value in b.items():
> > if key in c:
> > c[key] = c[key] or value
> > else:
> > c[key] = value
> >
> >
> > # 4: keep both, in a list of 1 or 2 items
> > c = {key:[value] for key, value in a.items()}
> > for key, value in b.items():
> > if key in c and value != c[key][0]:
> > c[key].append(value)
> > else:
> > c[key] = [value]
> >
> >
> > The first three are special cases of a more general case, where
> > you have a "decision function" that takes two values (one from dict a
> > and the other from dict b) and decides which one to keep. Case 1 ("a
> > always wins") would use `lambda x,y: x`, case 2 ("b wins") would use
> > `lambda x,y: y` and case 3 would use operator.or_.
> >
> > The question is, why should any one of these be picked out as so
> > obviously more useful than the others as to deserve being a dict method
> > or operator support?
> >
> > Steven
>
>
>
> All solutions provided by you are not one-liners. Every requires at least 2 lines \
> of code and is an imperative-style code block, instead of a simple expression.
Excellent as it makes the code easier to read. Let's leave things like
that.
> I would really like to have a simple dict joining _expression_ that can be inserted \
> everywhere I just need.
I wouldn't.
--
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.
Mark Lawrence
---
This email is free from viruses and malware because avast! Antivirus protection is \
active. http://www.avast.com
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic