[Python-ideas] dictionary constructor should not allow duplicate keys
Ethan Furman
ethan at stoneleaf.us
Tue May 3 17:27:16 EDT 2016
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~
More information about the Python-ideas
mailing list