两段请求报文,判断不一样的key和value,只判断d2里和d1不同的值,和全部不同的key

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
ok_req={"version": "9.0.0","is_test": True,"store": "","urs": "","device": {"os": "android","imei": "99001062198893","device_id": "CQliMWEyYTEzNTYyYzk5MzJmCTJlNmY3Zjkx","mac": "02:00:00:00:00:00","galaxy_tag": "CQliMWEyYTEzNTYyYzk5MzJmCTJlNmY3Zjkx","udid": "a34b1f67dd5797df93fdd8b072f1fb8110fd0db6","network_status": "wifi"},"adunit": {"category": "VIDEO","location": "1","app": "7A16FBB6","blacklist": ""},"ext_param":{"is_start" : 0,"vId":"VW0BRMTEV"}
}
not_ok={"version": "9.0.0","is_test": True,"urs": "1","store": "","device": {"os": "android","imei": "99001062298893","device_id": "CQliMWEyYTEzNTYyYzk5MzJmCTJlNmY3Zjkx","mac": "02:00:00:00:00:00","galaxy_tag": "CQliMWEyYTEzNTYyYzk5MzJmCTJlNmY3Zjkx","udid": "a34b1f67dd5797da93fdd8b072f1fb8110fd0db6","network_status": "wifi"},"adunit": {"category": "VIDEO","location": "1","app": "7A16FBB6","blacklist": ""},"ext_param": {"is_start": 0,"vid": "VW0BRMTEV"}
}

方法一的需求分析:

1. 循环d1的key,通过key去d2里取值,取不到的就是d2中不存在这个key,d2与d1里不一样的key

2. 判断通过key取值的类型,如果是dict类型的继续循环

3. 把d1和d2中的key转换成集合类型,取差集,取出的key即d1和d2中不一样的key

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def compare(dic_1,dic_2):for k in dic_1:v1=dic_1.get(k)v2=dic_2.get(k,'get不到值')#通过k去d2里取值,d2里如果没有这个key,返回get不到值if type(v1)==dict:compare(v1,v2)#取值为dict类型递归else:if v1 != v2 and v2 !='get不到值' :print ('value不一样的:key是%s,v1是%s,v2是%s'%(k,v1,v2))r1 = set(dic_1.keys())r2 = set(dic_2.keys())res=r1.symmetric_difference(r2)print('两个请求报文中不一样的key是:',','.join(res))compare(ok_req,not_ok)

方法二的需求分析:

1. 已知报文是二维,创建一个方法,把二维字典变成一维字典,key用特定的符号连接起来

2. 循环d1的key,取d2里面取值,如果v1==v2,就在d2里把这个键值对删除,不同的话,说明key是d1里与d2里k-v不同的数据

3. d2里剩下的全是和d1里k-v不同的数据,循环d2剩余的数据并输出

def buildDict(dict_0):#把报文的二维字典变成一维,二维字典的样式变成{一维字典key||二维key:value}dict_t = {}for key in dict_0:value = dict_0.get(key)if type(value) == dict:for k,v in value.items():dict_t[key+'||'+k]=velse:dict_t[key]=valuereturn dict_tdef compare(ok_req,not_ok):dic_1 = buildDict(ok_req)#把ok_req报文变成一维的字典格式dic_2 = buildDict(not_ok)#把not_ok报文变成一维的字典格式for k in dic_1:v1 = dic_1.get(k)v2 = dic_2.get(k)if v1==v2:dic_2.pop(k)#把dict_2中key和value与dict_1中一样的删除else:print('dic_1中数据不同的k-v,是' + k+':'+dic_1.get(k))for k in dic_2:#dic_2中剩余的都是和dic_1中不一样的keyprint('dic_2中不一样的k-v,是'+k+':'+dic_2.get(k))compare(ok_req,not_ok)

python之请求报文对比(假定最多二维字典)相关推荐

  1. python 全栈开发,Day128(创建二维码,扫码,创建玩具的基本属性)

    python 全栈开发,Day128(创建二维码,扫码,创建玩具的基本属性) 昨日内容回顾 1.app播放音乐plus.audio.createPlayer(文件路径/URL)player.play( ...

  2. 在Ubuntu 16.04.5 LTS上使用python第三方库QRCode 6.0生成二维码实录

    简介 二维码简称 QR Code(Quick Response Code),学名为快速响应矩阵码,是二维条码的一种,由日本的 Denso Wave 公司于 1994 年发明.现随着智能手机的普及,已广 ...

  3. Python语言学习之pandas:DataFrame二维表的简介、常用函数、常用案例之详细攻略

    Python语言学习之pandas:DataFrame二维表的简介.常用函数.常用案例之详细攻略 目录 DataFrame的简介 DataFrame的常用案例 1.写入和读取excel表格文件

  4. Python 中的“二维”字典 (two-dimension dictionary)

    Python 中的dict可以实现迅速查找.那么有没有像数组有二维数组一样,有二维的字典呢?比如我需要对两个关键词进行查找的时候.2D dict 可以通过 dict_2d = {'a': {'a': ...

  5. python二维字典简单赋值取值

    python二维字典简单赋值取值 一维字典 二维字典 访问二维字典 字典和列表的区别 小白一个,记录python二维字典的学习 一维字典 字典是用花括号来定义的,比如 dict = {'姓名':'汪汪 ...

  6. Python语言学习之pandas:DataFrame二维表的简介、常用函数、常用案例(增删改查排序之选择指定列、根据条件选择特定数据、赋值、列名重命名、修改列数据、处理缺失值、列合并、分组之详细攻略

    Python语言学习之pandas:DataFrame二维表的简介.常用函数.常用案例(增删改查排序之选择指定列.根据条件选择特定数据.赋值.列名重命名.修改列数据.处理缺失值.列合并.分组之详细攻略 ...

  7. Python 二维字典定义

    初始化二维字典 二维字典形如, 值为字典: C={"a": {"b": {2}}, "b": {"c": {1}}} f ...

  8. [Python学习] 专题五.列表基础知识 二维list排序、获取下标和处理txt文本实例

    通常测试人员或公司实习人员需要处理一些txt文本内容,而此时使用Python是比较方便的语言.它不光在爬取网上资料上方便,还在NLP自然语言处理方面拥有独到的优势.这篇文章主要简单的介绍使用Pytho ...

  9. python绘制图形沙漏_pytorch-pose一个用于二维人体姿势估计的PyTorch工具包。 - pytorch中文网...

    pytorch-pose PyTorch-Pose是2D单人姿态估计的一般流水线的PyTorch实现.其目的是为最流行的人体姿态数据库(如MPII人体姿态,LSP和FLIC)提供训练/推理/评估的接口 ...

最新文章

  1. 综合布线系统入门及应用(二)
  2. centos 7 php mysql apache_CentOS 7 搭建 Apache+MySQL+PHP
  3. windows 下安装rabbitmq
  4. java dvr_java实现海康NVR/DVR设备工作状态获取
  5. 职高计算机专业c语言_C语言程序设计(全国高职高专计算机系列精品教材)
  6. 电视盒子ADB常用命令
  7. 极客时间java高级(第二次课程)
  8. startup.bat闪退解决
  9. TortoiseGit 使用教程
  10. 最大面额钞票10的21次方
  11. android+路由器+名称,路由器默认wifi名称是什么?
  12. 五年级下册计算机知识点,五年级下册信息技术知识点(教材解析泰山版)
  13. 容错服务器ftserver网卡状态,容错服务器ftServer260045006300技术规格
  14. Eclipse转IDEA开发java项目spring+mybaits项目踩坑记录
  15. Google JavaScript Style Guide
  16. 如何彻底卸载ArcGis
  17. 上网制作“网络地理图册”网页
  18. Python网络爬虫实战:爬取携程网酒店评价信息
  19. cakephp: 和Smarty集成
  20. PPT(美化入门第一课)

热门文章

  1. jstl自定义标签接口介绍
  2. argz_create_sep函数
  3. jQuery 侧栏菜单点击body消失
  4. ecshop几个价格
  5. Debian 编译内核全过程[转]
  6. python画哪吒_用Python爬取暑期档大火的《哪吒》,20W+评论数据,我们分析一波...
  7. 【学习笔记】智能制造问与答
  8. 【实用】ABAP“FOR ALL ENTRIES”的Hints 优化
  9. 【MM配置】Purchasing 采购配置
  10. sap scc4 客户端设置