On 05/03/2016 01:43 PM, Michael Selik wrote:
On Tue, May 3, 2016 at 4:00 PM Ethan Furman wrote:
Which seems irrelevant to your argument: a duplicate key is a duplicate key whether it's 123 or 'xyz'.
If an expression includes an impure function, then the duplication of assignment to that key may have a desirable side-effect.
I'm willing to say that should be done with an existing dict, not in a literal.
I'm pretty sure the OP would be happy with uniqueness of keys, whether those keys were string literals, numeric literals, or function objects.
How would you handle an expression that evaluates differently for each call? For example:
{random(): 0, random(): 1}
Easy: Don't Do That. ;)
Let me flip the original request: I'd like to hear stronger arguments for change, please. I'd be particularly interested in hearing how often Pylint has caught this mistake.
Well, when this happened to me I spent a loooonnnnnngggg time figuring out what the problem is. One just doesn't expect duplicate keys to not raise: --> dict(one=1, one='uno') File "<stdin>", line 1 SyntaxError: keyword argument repeated So I guess the current advice is: Don't use dict literals, use dict() instead. And that just seems silly. ;) -- ~Ethan~