「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了解更多。
本期分享结束,咱们下回见~
「Python实用秘技10」深度比较Python对象间差异的更多相关文章
- 「Python实用秘技09」更好用的函数运算缓存
		本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第9期 ... 
- 「Python实用秘技01」复杂zip文件的解压
		本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的新系列文章「Python实用秘技」的第1 ... 
- 「Python实用秘技02」给Python函数定“闹钟”
		本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第2期 ... 
- 「Python实用秘技03」导出项目的极简环境依赖
		本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第3期 ... 
- 「Python实用秘技04」为pdf文件批量添加文字水印
		本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第4期 ... 
- 「Python实用秘技05」在Python中妙用短路机制
		本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第5期 ... 
- 「Python实用秘技06」逐行监听Python程序的内存消耗
		本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第6期 ... 
- 「Python实用秘技07」pandas中鲜为人知的隐藏排序技巧
		本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第7期 ... 
- 「Python实用秘技08」一行代码解析地址信息
		本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第8期 ... 
随机推荐
- 124_Power Pivot&Power BI DAX优化计算最大连续次数
			博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 最大连续次数或者是最大连续子序列问题,在DAX中如何快速计算呢? 思路 1.N-1:按照INDEX错位 2.ST ... 
- Java_循环结构
			目录 while循环 do...while循环 for循环 for循环嵌套 增强for循环 打印三角形 Debug 视频 while循环 while(布尔表达式){ //循环内容 } //死循环 wh ... 
- Kubernetes Job Controller 原理和源码分析(三)
			概述Job controller 的启动processNextWorkItem()核心调谐逻辑入口 - syncJob()Pod 数量管理 - manageJob()小结 概述 源码版本:kubern ... 
- 使用pip安装库或执行pip命令时报错解决方案
			初次安装pip后执行安装升级一般不会有问题,但是国外的镜像源下载升级由于网速过慢会进行报错,提示需要升级 pip 或者下载速度很慢最后直接报了错如下图: 这个时候只需要修改镜像源即可,建议修改为永久镜 ... 
- LSP原则是什么
			如果这篇文章能够帮到您,请给我一个免费的赞,谢谢QWQ! LSP原则并不难,但是地方就会把它说的很啰嗦,如果你对LSP还是感到疑惑,请往下看看. 先上代码: public class Bird { p ... 
- .NET C#基础(6):命名空间 - 组织代码的利器
			0. 文章目的 面向C#新学者,介绍命名空间(namespace)的概念以及C#中的命名空间的相关内容 1. 阅读基础 理解C与C#语言的基础语法 2. 名称冲突与命名空间 2.1 一个生活例 ... 
- Java实现http大文件流读取并批量插入数据库
			1.概述 请求远程大文本,使用流的方式进行返回.需要设置http链接的超时时间 循环插入到List中,使用mybatis-plus批量插入到mysql中 2.需求 两台服务器 大文件放到其中一台服务器 ... 
- ESXI系列问题整理以及记录——使用SSH为设备打VIB驱动包,同时提供一种对于ESXI不兼容螃蟹网卡(Realtek 瑞昱)的问题解决思路
			对于ESXI不兼容螃蟹网卡的问题,这里建议购买一张博通的低端单口千兆网卡,先使用博通网卡完成系统部署,再按照下文方法添加螃蟹网卡的VIB驱动,最后拆除博通网卡. 螃蟹网卡VIB驱动包下载地址:http ... 
- 打通web的三维国产引擎!老子云AMRT,够牛!
			AMRT(Auto Mobile Reality Technology)指的是自动化移动现实技术,它是老子云3D模型自动轻量化引擎及轻量化模型格式.模型展示框架.API/SDK的统称.3D研发技术其中 ... 
- Mac安装Brew包管理系统
			Mac安装Brew包管理系统 前言 为什么需要安装brew 作为一个开发人员, 习惯了使用centos的yum和ubuntu的apt, 在mac中有没有这两个工具的平替? 有, 就是Brew. Bre ... 
