Pydantic を使ってシーケンスを名前でアクセスする
 背景
 次のようなコードだとシーケンスの要素にアクセスする際に、インデックスを使う必要がある。
  | # x , y or y, x
coordinate = (1, 2)
# left, right, top, bottom?
rectangle = (1, 2, 3, 4)
# width, height?
size = (1, 2)
  | 
  上記のようなコードだと、各要素が何を示しているかわかりにくい。そこで、Pydantic を使って名前でアクセスできるようにする。
 シーケンスを名前でアクセスする
 次のように、AliasPath を使って名前でアクセスできるようにする。namesでリストを受け取り、その要素をfirst_nameとlast_nameに割り当てる。
  | from pydantic import BaseModel, Field, AliasPath
class User(BaseModel):
    first_name: str = Field(validation_alias=AliasPath('names', 0))
    last_name: str = Field(validation_alias=AliasPath('names', 1))
user = User.model_validate({'names': ['John', 'Doe']})
print(user)
#> first_name='John' last_name='Doe'
  | 
  AliasPath は、AliasChoices と組み合わせて使うことで、明確な field 名とシーケンスの両方で値を受け取ることができる。
  | from pydantic import BaseModel, Field, AliasPath, AliasChoices
class User(BaseModel):
    first_name: str = Field(validation_alias=AliasChoices('first_name', AliasPath('names', 0)))
    last_name: str = Field(validation_alias=AliasChoices('last_name', AliasPath('names', 1)))
user = User.model_validate({'first_name': 'John', 'last_name': 'Doe'})
print(user)
#> first_name='John' last_name='Doe'
user = User.model_validate({'names': ['John', 'Doe']})
print(user)
#> first_name='John' last_name='Doe'
user = User.model_validate({'names': ['John'], 'last_name': 'Doe'})
print(user)
#> first_name='John' last_name='Doe'
  |