• 「Python实用秘技10」深度比较Python对象间差异


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

      这是我的系列文章「Python实用秘技」的第10期,本系列立足于笔者日常工作中使用Python积累的心得体会,每一期为大家带来一个几分钟内就可学会的简单小技巧。

      作为系列第10期,我们即将学习的是:深度比较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': [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)
    

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

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

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

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

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

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


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

  • 相关阅读:
    Java并发 | 15.[基础] 线程安全分析
    计算机视觉的应用14-目标检测经典算法之YOLOv1-YOLOv5的模型架构与改进过程详解,便于记忆
    一、软件工程概述+练习题
    类和对象·默认成员函数
    Unity与 DLL文件 | Mac中使用 Xcode项目使用C++生成 .dylib文件
    [Electron]中IPC进程间通信
    久其报表软件基本操作指引
    强化学习:价值迭代求解迷宫寻路问题
    Vue--keep-alive--使用/实例
    LeetCode_栈_中等_227.基本计算器 II(不含括号)
  • 原文地址:https://www.cnblogs.com/feffery/p/16557188.html