用python对比两个字典的差异

这篇具有很好参考价值的文章主要介绍了用python对比两个字典的差异。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章目录

  • 前言
  • 一、使用目的和设计思路
  • 二、使用步骤
    • 1.python3环境代码
    • 2.字典对比的打印结果
  • 总结

前言

在工作中或者某些场景,我们需要去对比两个字典对象的差异性。尤其是软件版本升级的时候我们需要去验证一些API接口返回的数据,升级前后数据是否一致,如果不一致,则需要打印出这些不一致的地方,人工或者代码去判断是否满足功能要求。


一、使用目的和设计思路

例如现在有两个字典dict1和dict2,我要找出这两个字典之间的差异。

dict1 = {'name':'古天乐','age':26,'cars': {'BMW':['740','X5'],'Audi':'A8','Porsche':['Cayenne']},'爱好':['射击','足球'],'city':'WUH','school':'DMT'}

dict2 = {'name':'古天乐','age':27,'cars':{'BMW':['740','X3','535Li']},'爱好':['射击','篮球'],'cityname':'WUH'}

这两个字典的结构稍微偏复杂,里面嵌套了列表和字典,这种嵌套结构的数据在API接口中很常见。现在我们想要对这两个字典进行对比,我们期望得到如下对比结果:

1)dict1中有而dict2中缺失的key;dict2中有而dict1中缺失的key

2)dict1和dict2中嵌套的列表中缺失的元素

3)dict1和dict2中相同key却不同值的差异打印

4)如上的打印,都需要打印出字典中key的绝对路径

二、使用步骤

1.python3环境代码

代码如下:

dict1 = {'name':'古天乐','age':26,'cars': {'BMW':['740','X5'],'Audi':'A8','Porsche':['Cayenne']},'爱好':['射击','足球'],'city':'WUH','school':'DMT'}
dict2 = {'name':'古天乐','age':27,'cars':{'BMW':['740','X3','535Li']},'爱好':['射击','篮球'],'cityname':'WUH'}

class CompareHandle():
    def __init__(self):
        pass

    def compareDictionaries(self,dict1:dict,dict2:dict,path=''):
        err = ''
        key_err = ''
        value_err = ''
        listValue_err = ''
        oldpath = path

        for k in dict1.keys():
            if oldpath != '':
                path = f'{oldpath}->{k}'
            else:
                path = f'{k}'
            if k not in dict2:
                key_err += f'{path}:该key在dict2中缺失\n'
            else:
                if isinstance(dict1[k],dict) and isinstance(dict2[k],dict):
                    err += self.compareDictionaries(dict1[k],dict2[k],path)
                else:
                    if dict1[k] != dict2[k]:
                        if isinstance(dict1[k],list) and isinstance(dict2[k],list):
                            if isinstance(dict1[k][0],str): #暂时只考虑list中对象全为str的情况
                                diffList1 = list(set(dict1[k])-set(dict2[k]))
                                diffList2 = list(set(dict2[k]) - set(dict1[k]))
                                if diffList1 != [] and diffList2 == []:
                                    listValue_err += f'{path}:{diffList1}该元素在ditc2中缺失\n'
                                elif diffList1 == [] and diffList2 != []:
                                    listValue_err += f'{path}:{diffList2}该元素在ditc1中缺失\n'
                                else:
                                    listValue_err += f'{path}:{diffList1}该元素在ditc2中缺失\n'
                                    listValue_err += f'{path}:{diffList2}该元素在ditc1中缺失\n'
                                    # print(key_err)
                        else:
                            value_err += f'{path}:\n'
                            value_err += f'\t- {dict1[k]}\n'
                            value_err += f'\t- {dict2[k]}\n'
        for k in dict2.keys():
            if oldpath != '':
                path = f'{oldpath}->{k}'
            else:
                path = f'{k}'
            if k not in dict1:
                key_err += f'{path}:该key在dict1中缺失\n'

        return key_err + value_err + err + listValue_err

compareHandle = CompareHandle()
ret = compareHandle.compareDictionaries(dict1,dict2)
print(ret)

2.字典对比的结果打印

city:该key在dict2中缺失
school:该key在dict2中缺失
cityname:该key在dict1中缺失
age:
	- 26
	- 27
cars->Audi:该key在dict2中缺失
cars->Porsche:该key在dict2中缺失
cars->BMW:['X5']该元素在ditc2中缺失
cars->BMW:['X3', '535Li']该元素在ditc1中缺失
爱好:['足球']该元素在ditc2中缺失
爱好:['篮球']该元素在ditc1中缺失

总结

可以很好的对比出两个字典的差异,运用到工作中则能对应实现对比两份json数据的差异。只是目前代码中对于嵌套列表,列表只支持元素全是字符串的情况。欢迎大家提出意见!文章来源地址https://www.toymoban.com/news/detail-548146.html

到了这里,关于用python对比两个字典的差异的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 差异对比犀利手册:使用 Partial Diff 插件在 VSCode 中比较代码差异

    简介: 在本教程中,我们将介绍如何在 Visual Studio Code(VSCode)编辑器中安装和使用 Partial Diff 插件来进行源代码文件的差异比较。Partial Diff 插件是一个强大且简单的工具,可以帮助你更容易地查看和理解代码的变化。在本教程中,我们将带你从头开始,一步一步地进行安装

    2024年02月05日
    浏览(35)
  • 使用 Java 对比两个PDF文档之间的差异

    不论是在团队写作还是在个人工作中,PDF 文档往往会经过多次修订和更新。掌握 PDF 文档内容的变化对于管理文档有极大的帮助。通过对比 PDF 文档,用户可以快速找出文档增加、删除和修改的内容,更好地了解文档的演变过程,轻松地管理文档。本文将介绍如何 在 Java 程序

    2024年02月08日
    浏览(39)
  • Java Stream比较两个List的差异,并取出不同的对象

    可以使用Java8的Stream API来比较两个List的差异,并取出不同的对象。   1. 将两个List转换为Stream类型;   2. 调用Stream的filter方法,将不同的对象过滤出来;   3. 将过滤出的不同的对象转换为List类型。         上述代码中,将两个List类型的对象list1和list2转换为Stream类型,并

    2024年02月08日
    浏览(39)
  • 如何在Python 查找两个列表之间的差异?

    在处理数据和进行列表操作时,经常需要查找两个列表之间的差异。Python 提供了多种方法来实现这个目标,从简单的循环比较到使用内置函数和库函数等。本文将详细介绍几种常用的方法,帮助您在 Python 中查找两个列表之间的差异。 最基本的方法是使用循环逐个比较列表中

    2024年02月11日
    浏览(38)
  • 使用python_opencv比较图像差异/使用python_opencv找出两张图像的差异范围

    目录 1 创建conda环境 2 安装python库  2.1 报错 ModuleNotFoundError: No module named \\\'numpy\\\' 3 image_diff.py

    2024年02月05日
    浏览(36)
  • Python —— 将两个列表组成一个字典

    场景: 在不需要遍历的情况下将两个列表组成一个字典 分别有列表A 和 列表B,将列表A作为字典的键,列表B作为字典的值 - zip函数的作用是将可迭代对象中对应的元素给打包成元组并以列表的形式返回 字典创建方法 dict() 能够将这种类型的对象直接转为键值对格式,使用该

    2024年02月11日
    浏览(37)
  • Python|合并两个字典的8种方法

    在Python中,有多种方法可以通过使用各种函数和构造函数来合并字典。在本文中,我们将讨论一些合并字典的方法。 1. 使用方法update() 通过使用Python中的update()方法,可以将一个列表合并到另一个列表中。但是在这种情况下,第二个列表被合并到第一个列表中,并且没有创建

    2024年02月09日
    浏览(37)
  • Python 图像处理:对比两张图片的差异

    在图像处理领域,对比两张图片的差异是一项常见的任务。Python 提供了许多强大的工具和库,使我们能够轻松地实现这一目标。本文将介绍如何使用 Python 对比两张图片,检测和可视化它们之间的差异。 在开始之前,我们首先需要定义图像差异。图像差异可以被理解为两张图

    2024年02月11日
    浏览(31)
  • Python中的比较两个字符串

    📚 个人网站:ipengtao.com 在Python编程中,字符串比较是一项常见且关键的操作,涵盖了诸多方法和技巧。比较两个字符串是否相等、大小写是否一致,或者在一个字符串中寻找特定的子字符串,都是日常开发中经常遇到的需求。除此之外,使用正则表达式进行模式匹配、比较

    2024年01月19日
    浏览(46)
  • 软件测试|如何在 Python 中比较两个列表

    简介 在Python中,比较两个列表是一个常见的任务,可以帮助你找出两个列表之间的差异、共同元素或其他关系。本文将详细介绍如何在Python中比较两个列表的不同方法,包括使用循环、集合操作和列表推导式等。 方法1:使用循环比较列表 方法2:使用集合操作比较列表 Pyt

    2024年02月02日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包