# 值相等
EQUAL = '='
# 值不等
DIFF = '!'
# 独有key
MORE = '+'
# 缺失key
LACK = '-'

class CompareTwoDict(object):
    """比较两个字典差异"""

def __init__(self, dict1, dict2):
        self.dict1 = dict1
        self.dict2 = dict2
        self.key_list = self.keys(dict1, dict2)
        self.result = {}

def compare(self, key):
        """比较一个key"""
        # 这里默认value不是None
        v1 = self.dict1.get(key)
        v2 = self.dict2.get(key)
        # 如果都是字典继续深入比较
        if (type(v1) == dict) and (type(v2) == dict):
            self.result[key] = CompareTwoDict(v1, v2).main()
        else:
            self.result[key] = self.diff(v1, v2)

@staticmethod
    def diff(v1, v2):
        """比较value差异"""
        if (v1 is not None) and (v2 is not None):
            if v1 == v2:
                return EQUAL
            else:
                return DIFF
        elif v1 is not None:
            return MORE
        else:
            return LACK

@staticmethod
    def keys(dict1, dict2):
        """获取所有key"""

return list(set(dict1.keys() + dict2.keys()))

def main(self):

for k in self.key_list:
            self.compare(k)

return self.result

d1 = {"class": {"l1": {"name": "jack", 'age': {"j": 1}}}, 'l2': {"name": 'laowang', "age": 13}}
d2 = {"class": {"l1": {"name": "jacks", 'age': {'k': 3}}}, 'l2': {"name": 'laowang', "age": 1, 'gender': 'male'}}

if __name__ == '__main__':
    cmp = CompareTwoDict(d1, d2)
    print(cmp.main())

python 比较两个字典的结构差异相关推荐

  1. python合并两个字典的内容,使用update方法

    python合并两个字典的内容,使用update方法 update() 方法可使用一个字典所包含的键值对来更新己有的字典. 在执行 update() 方法时,如果被更新的字典中己包含对应的键值对,那么 ...

  2. python计算两个字典的相同点(从key、value、item角度)

    python计算两个字典的相同点(从key.value.item角度) 字典是由一个一个的 key-value 构成的,key 是找到数据的关键,Python 对字典的操作都是通过 key 来完成的. ...

  3. python字典合并几种方式对比,Python合并两个字典的常用方法与效率比较

    本文实例讲述了Python合并两个字典的常用方法与效率比较.分享给大家供大家参考.具体分析如下: 下面的代码举例了5种合并两个字典的方法,并且做了个简单的性能测试 #!/usr/bin/python ...

  4. python中两个字典如何合并为一个_python怎么合并两个字典

    Python中将两个字典进行合并操作,是一个比较常见的问题.本文将介绍几种实现两个字典合并的方案,并对其进行比较. 对于这个问题,比较直观的想法是将两个字典做相加操作,赋值给结果字典,其代码为: py ...

  5. python 两个dict合并,Python 中两个字典(dict)合并_python dict 合并_python 两个dict合并...

    Python 中两个字典(dict)合并_python dict 合并_python 两个dict合并 dict1={1:[1,11,111],2:[2,22,222]} dict2={3:[3,33 ...

  6. 【面试题】python怎么合并两个字典

    Python中将两个字典进行合并操作,是一个比较常见的问题.本文将介绍几种实现两个字典合并的方案,并对其进行比较. 对于这个问题,比较直观的想法是将两个字典做相加操作,赋值给结果字典,其代码为: [方 ...

  7. python字典合并_Python中如何实现两个字典合并

    更多 Python中将两个字典进行合并操作,是一个比较常见的问题.本文将介绍几种实现两个字典合并的方案,并对其进行比较. 对于这个问题,比较直观的想法是将两个字典做相加操作,赋值给结果字典,其代码为: ...

  8. python两个元组相加_Python两个字典键同值相加的几种方法

    Python中,如何合并两个键相同,值为元祖类型的字典? dicxs={"李明":("男",19), "杨柳":("女" ...

  9. 《Python Cookbook(第3版)中文版》——1.9 在两个字典中寻找相同点

    本节书摘来自异步社区<Python Cookbook(第3版)中文版>一书中的第1章,第1.9节,作者[美]David Beazley , Brian K.Jones,陈舸 译,更多章节内 ...

最新文章

  1. python代码获取今天、昨天、明天的日期
  2. [bzoj1797][Ahoi2009]Mincut 最小割
  3. android 音乐播放器的状态栏通知,Android仿虾米音乐播放器之通知栏notification解析...
  4. 了解Entity Framework中事务处理
  5. java如何循环调用方法_Java:调用方法的“中断”循环?
  6. 好奇心、求知欲、理解力一直是我生命里最强大的驱动力​
  7. anaconda3安装_Ubuntu20.04安装配置Anaconda3
  8. Nginx valid_referer 防盗链
  9. 文本框焦点清空以及回车键提交表单的实现
  10. 我的世界pc要安装java_我的世界安装教程 PC版新手安装攻略
  11. 县级外业调查及举证软件_MapGIS第三次国土调查系列产品
  12. 通过PD4ML把html转pdf(包含显示页眉页脚,插入图片,显示页数)
  13. 思科模拟器-利用VTP管理VLAN
  14. shell中的美元符号
  15. 无人驾驶车辆纵向速度PID控制
  16. android高仿今日头条小视频转场切换效果
  17. PDF文件打印不清楚怎么办?
  18. 将yolov5中的PANet层改为BiFPN
  19. 第068封“情书”:耶路撒冷Assembling a 3DScanOfTheEarth可视化地图数据
  20. Vmware16支持MacOS

热门文章

  1. 【转帖】关于找工作的鸡零狗碎(续)
  2. 2022中式烹调师(初级)考试练习题及答案
  3. 【新书速递】分布式事务开山之作,带你深入理解分布式事务
  4. VMware虚拟机安装Ubuntu以及Linux入门基础
  5. 光会码数,没有结论?试试这5种分析方法
  6. 【苹果推群发】苹果相册推广告协议应用程序将被发送到服务器
  7. 地球投影的分类和实例
  8. 局域网无法访问发布的网站问题解决
  9. 《吹小号的天鹅|寻找C站宝藏》
  10. CRM系统,覆盖企业多应用场景