深度比较Python对象之间的差异

很多情况下我们需要对两条数据之间的差异进行比较,如果仅仅是针对数值型对象,那么两者的差值就是所谓的差异,但是如果要比较两条 JSON 数据间的差异呢?

由于 JSON 数据具有可嵌套可分层的特点,想要明确找出两条 JSON 数据间的差异并加以描述,如果自己书写方法还是有些费事。这种情况我们就可以使用到第三方库 deepdiff 中的 DeepDiff() 方法,它基于递归对不同对象进行深度比较。

使用 pip install deepdiff 完成安装之后,通过 from deepdiff import DeepDiff 导入所需功能,就可以直接对两个 JSON 对象之间的差异进行比较,下面是一个简单的例子:

from deepdiff import DeepDiff
obj1 = {
    'level1': [
            'level1-1'1,
            'level1-2'1,
            'level1-3': [
                    'level1-3-1': [123]
    'level2''a'
obj2 = {
    'level1': [
            'level1-1'1,
            'level1-2'1,
            'level1-3': [
                    'level1-3-1': [121]
    'level2''b'
DeepDiff(obj1, obj2)

可以看到打印的检测结果中具体声明了差异内容及具体位置,可以帮助我们开展后续其他处理。

除此之外,deepdiff还具有非常丰富的额外功能,譬如忽略对指定类型数据的比较检查:

亦或是通过定义层次规则,令DeepDiff()跳过对指定位置元素的差异检查:

还支持利用正则表达式定义要忽略的模糊层次规则,譬如下面的例子中我们使用正则批量忽略了多个键值对:

限制针对浮点数的检查精度,譬如下面的例子中限定significant_digits=2后,小数点后第二位以后的差异便被忽略:

以上就是本次分享的所有内容,如果你觉得文章还不错,欢迎关注公众号:Python编程学习圈,每日干货分享,内容覆盖Python电子书、教程、数据库编程、Django,爬虫,云计算等等。或是前往编程学习网,了解更多编程技术知识。

分类:
后端
标签: