Skip to content
You're viewing docs for v2.2. See the latest version →

Types/list types

list : allows list, tuple, set, frozenset, deque, or generators and casts to a list; when a generic parameter is provided, the appropriate validation is applied to all items of the list

typing.List : handled the same as list above

tuple : allows list, tuple, set, frozenset, deque, or generators and casts to a tuple; when generic parameters are provided, the appropriate validation is applied to the respective items of the tuple

typing.Tuple : handled the same as tuple above

deque : allows list, tuple, set, frozenset, deque, or generators and casts to a deque; when generic parameters are provided, the appropriate validation is applied to the respective items of the deque

typing.Deque : handled the same as deque above

from typing import Deque, List, Optional, Tuple

from pydantic import BaseModel


class Model(BaseModel):
    simple_list: Optional[list] = None
    list_of_ints: Optional[List[int]] = None

    simple_tuple: Optional[tuple] = None
    tuple_of_different_types: Optional[Tuple[int, float, bool]] = None

    deque: Optional[Deque[int]] = None


print(Model(simple_list=['1', '2', '3']).simple_list)
#> ['1', '2', '3']
print(Model(list_of_ints=['1', '2', '3']).list_of_ints)
#> [1, 2, 3]

print(Model(simple_tuple=[1, 2, 3, 4]).simple_tuple)
#> (1, 2, 3, 4)
print(Model(tuple_of_different_types=[3, 2, 1]).tuple_of_different_types)
#> (3, 2.0, True)

print(Model(deque=[1, 2, 3]).deque)
#> deque([1, 2, 3])

NamedTuple

subclasses of typing.NamedTuple : Similar to tuple, but creates instances of the given namedtuple class.

types returned from collections.namedtuple : Similar to subclass of typing.NamedTuple, but since field types are not specified, all fields are treated as having type Any

from typing import NamedTuple

from pydantic import BaseModel, ValidationError


class Point(NamedTuple):
    x: int
    y: int


class Model(BaseModel):
    p: Point


try:
    Model(p=('1.3', '2'))
except ValidationError as e:
    print(e)
    """
    1 validation error for Model
    p.0
      Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='1.3', input_type=str]
    """