58 lines
1.3 KiB
Python
58 lines
1.3 KiB
Python
from dataclasses import dataclass
|
|
|
|
# 最内层:人
|
|
@dataclass
|
|
class Person:
|
|
name: str
|
|
age: int
|
|
job: str
|
|
|
|
# 城市:里面包含 Person 对象
|
|
@dataclass
|
|
class City:
|
|
city_name: str
|
|
people: Person # 成员是 Person 对象
|
|
|
|
# 省份:里面包含城市列表
|
|
@dataclass
|
|
class Province:
|
|
province_name: str
|
|
city_list: list[City]
|
|
|
|
# 最外层顶级对象 Country,对标 LLM 的 res 返回对象
|
|
@dataclass
|
|
class Country:
|
|
country_name: str
|
|
province_list: list[Province]
|
|
# 先造最内层的人
|
|
p = Person(name="张三", age=20, job="程序员")
|
|
|
|
# 造城市,把人塞进去
|
|
hz = City(city_name="杭州市", people=p)
|
|
|
|
# 造省份,把城市放进列表
|
|
zj = Province(province_name="浙江省", city_list=[hz])
|
|
|
|
# 顶级大对象:整个中国,对标 res
|
|
china = Country(
|
|
country_name="中国",
|
|
province_list=[zj]
|
|
)
|
|
# 直接打印顶级对象 dataclass 友好一点,但依然不能直接拿内层数据
|
|
print(china)
|
|
|
|
# 逐层拆解,和 LLM 取值一一对应
|
|
# 1.取省份列表
|
|
provinces = china.province_list
|
|
# 2.取第0个省份
|
|
zhejiang = provinces[0]
|
|
# 3.取该省第0个城市
|
|
hangzhou = zhejiang.city_list[0]
|
|
# 4.拿到人对象,取 name
|
|
person_name = hangzhou.people.name
|
|
|
|
print(person_name) # 张三
|
|
print(hangzhou.people.age) # 20
|
|
result = china.province_list[0].city_list[0].people.name
|
|
print(result)
|