python 比较json/dictionary的库

简介: python 比较json/dictionary的库

在某些情况下,比较两个json/dictionary,或许这样就可以实现:

>>> a
{'a': 1, 'b': 2}
>>> b
{'a': 2, 'c': 2}
>>> cmp(a,b)        #-1或者1,代表两个dict不一样
-1
>>> c=a.copy()
>>> c
{'a': 1, 'b': 2}
>>> cmp(a,c)       #两者相同
0

但是,这只能比较两个是不是一样,不能深入各处哪里不一样的比较结果。

有这样一个库,就能解决这个问题,它就是json_tools

安装

方法1:

>>> pip install json_tools

或者

>>> easy_install json_tools

方法2:到这里下载源码:https://pypi.python.org/pypi/json_tools,然后进行安装

比较json

首先看看都有哪些属性或者方法,用万能的实验室来看:

>>> import json_tools
>>> dir(json_tools)

['builtins', 'doc', 'file', 'loader', 'name', 'package', 'path', '_patch_main', '_printer_main', 'diff', 'patch', 'path', 'print_function', 'print_json', 'print_style', 'printer']

从上面的结果中,可以看到json_tools的各种属性和方法。

我在一个项目中使用了diff,下面演示一下使用过程

>>> a
{'a': 1, 'b': 2}
>>> b
{'a': 2, 'c': 2}
>>> json_tools.diff(a,b)
[{'prev': 1, 'value': 2, 'replace': '/a'}, {'prev': 2, 'remove': '/b'}, {'add': '/c', 'value': 2}]

上面这个比较是比较简单的,显示的是b相对于a的变化,特别注意,如果是b相对a,就要这样写:json_tools.diff(a,b),如果是json_tools.diff(b,a),会跟上面有所不同,请看结果:

>>> json_tools.diff(b,a)
[{'prev': 2, 'value': 1, 'replace': '/a'}, {'prev': 2, 'remove': '/c'}, {'add': '/b', 'value': 2}]

json_tools(a,b),即b相对a发生的变化为例进行说明。

  • b和a都有键'a',但是b相对a,键'a'的值发生了变化,由原来的1,变为了2。所以在比较结果的list中,有一个元素反应了这个结果{'prev': 1, 'value': 2, 'replace': '/a'},其中,replace表示发生变化的键,value表示变化后即当前该键的值,prev表示该键此前的值。
  • b中的'c'相对与a,是新增的键。于是比较结果中这样反应出来:{'add': '/c', 'value': 2}
  • b相对于a没有'b'这个键,也就是在b中将其删除了,于是比较结果中这样来显示:{'prev': 2, 'remove': '/c'}

通过上述结果,就显示出来的详细的比较结果,不仅如此,还能对多层嵌套的json进行比较。例如:

>>> a={"a":{"aa":{"aaa":333,"aaa2":3332},"b":22}}
>>> b={"a":{"aa":{"aaa":334,"bbb":339},"b":22}}
>>> json_tools.diff(a,b)
[{'prev': 3332, 'remove': '/a/aa/aaa2'}, {'prev': 333, 'value': 334, 'replace': '/a/aa/aaa'}, {'add': '/a/aa/bbb', 'value': 339}]

这里就显明了发生变化的key的嵌套关系。比如'/a/aa/aaa2',就表示{"a":{"aa":{"aaa2":...}}}的值发生了变化。

这里有了一个key的嵌套字符串,在真实的使用中,有时候需要将字符串转为json的格式,即{'prev': 3332, 'remove': '/a/aa/aaa2'}转化为{"a":{"aa":{"aaa2":3332}}}

将字符串组装成json格式

首先,回答前面的问题,可以自己写一个函数,实现那种组装。

但是,我是懒惰地程序员,我更喜欢python的原因就是它允许我懒惰。

from itertools import izip
目录
相关文章
|
17天前
|
调度 开发者 Python
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
|
21天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
51 0
|
6天前
|
XML 存储 数据库
Python中的xmltodict库
xmltodict是Python中用于处理XML数据的强大库,可将XML数据与Python字典相互转换,适用于Web服务、配置文件读取及数据转换等场景。通过`parse`和`unparse`函数,轻松实现XML与字典间的转换,支持复杂结构和属性处理,并能有效管理错误。此外,还提供了实战案例,展示如何从XML配置文件中读取数据库连接信息并使用。
Python中的xmltodict库
|
14天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
50 4
|
14天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
25 2
|
19天前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
39 7
|
15天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
20天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
25 3
|
13天前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
|
19天前
|
文字识别 自然语言处理 API
Python中的文字识别利器:pytesseract库
`pytesseract` 是一个基于 Google Tesseract-OCR 引擎的 Python 库,能够从图像中提取文字,支持多种语言,易于使用且兼容性强。本文介绍了 `pytesseract` 的安装、基本功能、高级特性和实际应用场景,帮助读者快速掌握 OCR 技术。
37 0