You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pydantic模型中排除指定字段参与哈希与相等性比较?

如何在Pydantic模型中排除指定字段参与哈希与相等性比较?

嘿,这个需求刚好可以用Pydantic自带的配置来解决,完全不用自己手动重写__hash__和__eq__方法!我给你分版本说下具体怎么做:

如果你用的是Pydantic v2(当前主流版本)

直接在模型的配置里指定要排除的字段就行,Pydantic会自动帮你处理相等性比较和哈希计算,而且这个字段依然会保留在实例里,序列化到JSON的时候也能正常输出,完全符合你的要求。

修改后的模型代码如下:

from datetime import datetime as dt
from pydantic import BaseModel

class TafReport(BaseModel, frozen=True):
    download_date: dt
    icao: str
    issue_time: dt
    validity_time_start: dt
    validity_time_stop: dt
    raw_report: str

    model_config = {
        "equality_exclude": {"download_date"}
    }

设置好之后,哪怕两个TafReport实例的download_date不一样,只要其他字段完全相同,Pydantic就会把它们视为相等的对象,哈希值也会一致。这时候你直接用tafs = list(set(tafs))来去重,就能得到去重后的结果了。

如果你还在使用Pydantic v1

可以给要排除的字段加上compare=False的参数,同样能让它不参与相等性和哈希计算,同时保留字段的其他功能:

from datetime import datetime as dt
from pydantic import BaseModel, Field

class TafReport(BaseModel, frozen=True):
    download_date: dt = Field(..., compare=False)
    icao: str
    issue_time: dt
    validity_time_start: dt
    validity_time_stop: dt
    raw_report: str

这样配置后,效果和v2的方案一样,不用你自己写任何魔法方法,直接用set去重就可以了。

备注:内容来源于stack exchange,提问作者glades

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 12:25:28