Python中使用DeepDiff比较int与string时如何完全忽略类型差异?
解决DeepDiff忽略数值与字符串类型差异的问题
首先得明确:ignore_type_in_groups参数的作用不是直接忽略单个值的类型差异,它是用来让集合、列表这类容器结构里的不同类型元素(比如int和str)被归为同一组进行匹配对比,而非直接消除值本身的类型差异。
要实现完全忽略数值和字符串的类型差异,你提到的number_to_string_func其实就是最直接的原生方案,只需要自定义一个转换函数,把字符串尝试转成对应数值(或者反过来),让两者的值能被判定为相等:
from deepdiff import DeepDiff def convert_str_to_num(value): try: # 先尝试转整数,不行转浮点数,都失败就返回原内容 return int(value) if value.isdigit() else float(value) except (ValueError, TypeError): return value # 传入自定义转换函数 diff_result = DeepDiff({"key": 0}, {"key": "0"}, number_to_string_func=convert_str_to_num) print(diff_result) # 输出空字典,说明无差异
如果你的场景里还需要处理其他类型的转换(比如bool和str),可以扩展这个转换函数的逻辑。另外,也可以用custom_operators自定义对比规则,但number_to_string_func对于数值和字符串的场景更简洁直接。
内容的提问来源于stack exchange,提问作者Yoooo
相关产品推荐
相关产品推荐

