[Python-ideas] dictionary constructor should not allow duplicate keys

Jonathan Goble jcgoble3 at gmail.com
Wed May 4 02:39:44 EDT 2016

On Wed, May 4, 2016 at 2:32 AM, Ethan Furman <ethan at stoneleaf.us> wrote:
> On 05/03/2016 09:18 PM, Random832 wrote:
>> To play devil's advocate for a minute here...
>> Why *don't* we allow duplicate keyword arguments in a function call,
>> anyway? CALL_FUNCTION doesn't seem to actually care, if I create this
>> situation by monkey-patching the calling function's consts to get
>> duplicate keywords. All the arguments that have been raised here for
>> *allowing* duplicate keyword arguments seem to apply just as well to
>> f(**{'a': 1}, **{'a': 2})
> Actually, I believe that is allowed now, although I'm not sure how far it
> goes.

As of Python 3.5.1, it is still not allowed:

Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:54:25) [MSC v.1900
64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> def func(**kwargs):
...     pass
>>> func(**{'a': 1}, **{'a': 2})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: func() got multiple values for keyword argument 'a'

More information about the Python-ideas mailing list