超实用!深度比较Python对象之间的差异

本文完整示例代码及文件已上传至Github仓库https://github.com/CNFeffery/PythonPracticalSkills

很多情况下我们需要对两条数据之间的差异进行比较,如果仅仅是针对数值型对象,那么两者的差值就是所谓的差异,但是如果要比较两条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': [1, 2, 3]
                }
            ]
        }
    ],
    'level2': 'a'
}

obj2 = {
    'level1': [
        {
            'level1-1': 1,
            'level1-2': 1,
            'level1-3': [
                {
                    'level1-3-1': [1, 2, 1]
                }
            ]
        }
    ],
    'level2': 'b'
}

DeepDiff(obj1, obj2)

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

877d32e0c1e0cac59b2f8d811d2c9329.png

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

6cd5116b1705c483dcc66bace24df587.png

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

d33145b56094e879061d960dca995b5b.png

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

580db060c97bce92c739481def60ca4b.png

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

ec7f3872ec6a343e64a251b235bda6ef.png

更多用法,感兴趣的读者朋友可以移步https://zepworks.com/deepdiff/5.8.2/diff.html了解更多。


本期分享结束,咱们下回见~👋

-------- End --------

推荐👇同名微信视频号

236b2ba9128fee6b221761f0bf1c662d.png

2deb8fa12c701e6d192b524166459864.jpeg
图解Pandas

图文00-内容框架介绍 | 图文01-数据结构介绍 | 图文02-创建数据对象 | 图文03-操作Excel文件 | 图文04-常见的数据访问 | 图文05-常见的数据运算 |  图文06-常见的数学计算 | 图文07-常见的数据统计 | 图文08-常见的数据筛选 |  图文09-常见的缺失值处理 | 图文10-数据合并操作 | 图文11-Groupby分组操作

628daa7737798f5affa84a1c19565d93.jpeg 4faf857e38c373e49908aefbcc3ee32f.jpeg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值