python 比较两个字典的结构差异
# 值相等
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 比较两个字典的结构差异相关推荐
- python合并两个字典的内容,使用update方法
python合并两个字典的内容,使用update方法 update() 方法可使用一个字典所包含的键值对来更新己有的字典. 在执行 update() 方法时,如果被更新的字典中己包含对应的键值对,那么 ...
- python计算两个字典的相同点(从key、value、item角度)
python计算两个字典的相同点(从key.value.item角度) 字典是由一个一个的 key-value 构成的,key 是找到数据的关键,Python 对字典的操作都是通过 key 来完成的. ...
- python字典合并几种方式对比,Python合并两个字典的常用方法与效率比较
本文实例讲述了Python合并两个字典的常用方法与效率比较.分享给大家供大家参考.具体分析如下: 下面的代码举例了5种合并两个字典的方法,并且做了个简单的性能测试 #!/usr/bin/python ...
- python中两个字典如何合并为一个_python怎么合并两个字典
Python中将两个字典进行合并操作,是一个比较常见的问题.本文将介绍几种实现两个字典合并的方案,并对其进行比较. 对于这个问题,比较直观的想法是将两个字典做相加操作,赋值给结果字典,其代码为: py ...
- 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 ...
- 【面试题】python怎么合并两个字典
Python中将两个字典进行合并操作,是一个比较常见的问题.本文将介绍几种实现两个字典合并的方案,并对其进行比较. 对于这个问题,比较直观的想法是将两个字典做相加操作,赋值给结果字典,其代码为: [方 ...
- python字典合并_Python中如何实现两个字典合并
更多 Python中将两个字典进行合并操作,是一个比较常见的问题.本文将介绍几种实现两个字典合并的方案,并对其进行比较. 对于这个问题,比较直观的想法是将两个字典做相加操作,赋值给结果字典,其代码为: ...
- python两个元组相加_Python两个字典键同值相加的几种方法
Python中,如何合并两个键相同,值为元祖类型的字典? dicxs={"李明":("男",19), "杨柳":("女" ...
- 《Python Cookbook(第3版)中文版》——1.9 在两个字典中寻找相同点
本节书摘来自异步社区<Python Cookbook(第3版)中文版>一书中的第1章,第1.9节,作者[美]David Beazley , Brian K.Jones,陈舸 译,更多章节内 ...
最新文章
- python代码获取今天、昨天、明天的日期
- [bzoj1797][Ahoi2009]Mincut 最小割
- android 音乐播放器的状态栏通知,Android仿虾米音乐播放器之通知栏notification解析...
- 了解Entity Framework中事务处理
- java如何循环调用方法_Java:调用方法的“中断”循环?
- 好奇心、求知欲、理解力一直是我生命里最强大的驱动力​
- anaconda3安装_Ubuntu20.04安装配置Anaconda3
- Nginx valid_referer 防盗链
- 文本框焦点清空以及回车键提交表单的实现
- 我的世界pc要安装java_我的世界安装教程 PC版新手安装攻略
- 县级外业调查及举证软件_MapGIS第三次国土调查系列产品
- 通过PD4ML把html转pdf(包含显示页眉页脚,插入图片,显示页数)
- 思科模拟器-利用VTP管理VLAN
- shell中的美元符号
- 无人驾驶车辆纵向速度PID控制
- android高仿今日头条小视频转场切换效果
- PDF文件打印不清楚怎么办?
- 将yolov5中的PANet层改为BiFPN
- 第068封“情书”:耶路撒冷Assembling a 3DScanOfTheEarth可视化地图数据
- Vmware16支持MacOS