python之请求报文对比(假定最多二维字典)
生活随笔
收集整理的這篇文章主要介紹了
python之请求报文对比(假定最多二维字典)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
兩段請求報文,判斷不一樣的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) 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的python之请求报文对比(假定最多二维字典)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python基础教程:新式类与经典类
- 下一篇: nginx,tomcat,apache三