python SyntaxError with dict(1=...), but {1:...} works

dictionary, notation, python

Solution

This is not a `dict` issue, but an artifact of Python syntax: keyword arguments must be valid identifiers, and `1` and `2` are not.

When you want to use anything that is not a string following Python identifier rules as a key, use the `{}` syntax. The constructor keyword argument syntax is just there for convenience in some special cases.

Problem

Python seems to have an inconsistency in what kind of keys it will accept for dicts. Or, put another way, it allows certain kinds of keys in one way of defining dicts, but not in others: ``` >>> d = {1:"one",2:2} >>> d[1] 'one' >>> e = dict(1="one",2=2) File "<stdin>", line 1 SyntaxError: keyword can't be an expression ``` Is the `{...}` notation more fundamental, and `dict(...)` just syntactic sugar? Is it because there is simply no way for Python to `parse dict(1="one")`? I'm curious...

Original source