pythonpython-typingtypeddict

TypedDict when keys have invalid names


If I have a key in a dictionary with an invalid identifier, such as A(2). How can I create a TypedDict with this field?

E.g

from typing import TypedDict

class RandomAlphabet(TypedDict):
    A(2): str

is not valid Python code, resulting in the error:

SyntaxError: illegal target for annotation

The same problem is with reserved keywords:

class RandomAlphabet(TypedDict):
    return: str

throws:

SyntaxError: invalid syntax

Solution

  • According to PEP 589 you can use alternative syntax to create a TypedDict as follows:

    Movie = TypedDict('Movie', {'name': str, 'year': int})

    So, in your case, you could write:

    from typing import TypedDict
    
    RandomAlphabet = TypedDict('RandomAlphabet', {'A(2)': str})
    

    or for the second example:

    RandomAlphabet = TypedDict('RandomAlphabet', {'return': str})
    

    PEP 589 warns, though:

    This syntax doesn't support inheritance, however, and there is no way to have both required and non-required fields in a single type. The motivation for this is keeping the backwards compatible syntax as simple as possible while covering the most common use cases.