[issue21320] dict() allows keyword expansion with integer keys, e.g. dict(**{5:'v'})

Cyphase report at bugs.python.org
Mon Apr 21 13:54:59 CEST 2014


New submission from Cyphase:

Python 2.7.6: Affected
Python 3.2.3: Not affected

dict() allows keyword expansion using a dict() with integer keys, whereas attempting to do so with most other functions raises a TypeError with the message, "keywords must be strings". The same thing happens with collections.defaultdict(), but not collections.Counter() or collections.OrderedDict, presumably because they override dict.__init__().

>>> old_dict = {'a': 1, 2: 'b'}
>>> old_dict
{'a': 1, 2: 'b'}
>>> other_dict = {'c': 3, 4: 'd'}
>>> other_dict
>>> new_dict = dict(old_dict, **other_dict)
>>> new_dict
{'a': 1, 2: 'b', 4: 'd', 'c': 3}

I feel like this must be known, but I didn't find anything with a search.

----------
components: Interpreter Core
messages: 216938
nosy: Cyphase
priority: normal
severity: normal
status: open
title: dict() allows keyword expansion with integer keys, e.g. dict(**{5:'v'})
type: behavior
versions: Python 2.7

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue21320>
_______________________________________


More information about the Python-bugs-list mailing list