Skip to main content
All writing

Using TypedDict with invalid attribute names

17 April 20241 min read95 words

I've previously covered how to use generic types for TypedDict values but another challenge you can run into when using TypedDict is in cases where a key name is not a valid identifier. In Python, identifiers (or names) are limited on the characters they can contain (generally uppercase and lowercase letters A through Z, the underscore _ and digits 0 through 9).

You'll generally use TypedDict by defining a class:

from typing import TypedDict
 
class Book(TypedDict):
  id: int
  name: str
 
book: Book = {"id": 123, "name": "To Kill A Mockingbird"}

However this syntax doesn't work if any keys aren't valid identifiers - perhaps they contain a period . or a hyphen -:

from typing import TypedDict
 
class Book(TypedDict):
  id: int
  name: str
  some-hyphen-field: str
  field.dot: str

In this case you can use the functional syntax:

from typing import TypedDict
 
Book = TypedDict(
  'Book',
  {
    "id": int,
    "name": str,
    "some-hyphen-field": str,
    "field.dot": str
  }
)

Related posts

Get new posts by email

Occasional notes on platform engineering, AI agents and frontend architecture. No spam, unsubscribe anytime.