国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用python對比兩個字典的差異

這篇具有很好參考價值的文章主要介紹了用python對比兩個字典的差異。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

文章目錄

  • 前言
  • 一、使用目的和設(shè)計思路
  • 二、使用步驟
    • 1.python3環(huán)境代碼
    • 2.字典對比的打印結(jié)果
  • 總結(jié)

前言

在工作中或者某些場景,我們需要去對比兩個字典對象的差異性。尤其是軟件版本升級的時候我們需要去驗證一些API接口返回的數(shù)據(jù),升級前后數(shù)據(jù)是否一致,如果不一致,則需要打印出這些不一致的地方,人工或者代碼去判斷是否滿足功能要求。


一、使用目的和設(shè)計思路

例如現(xiàn)在有兩個字典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'}

這兩個字典的結(jié)構(gòu)稍微偏復(fù)雜,里面嵌套了列表和字典,這種嵌套結(jié)構(gòu)的數(shù)據(jù)在API接口中很常見?,F(xiàn)在我們想要對這兩個字典進行對比,我們期望得到如下對比結(jié)果:

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

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

3)dict1和dict2中相同key卻不同值的差異打印

4)如上的打印,都需要打印出字典中key的絕對路徑

二、使用步驟

1.python3環(huán)境代碼

代碼如下:

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.字典對比的結(jié)果打印

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中缺失

總結(jié)

可以很好的對比出兩個字典的差異,運用到工作中則能對應(yīng)實現(xiàn)對比兩份json數(shù)據(jù)的差異。只是目前代碼中對于嵌套列表,列表只支持元素全是字符串的情況。歡迎大家提出意見!文章來源地址http://www.zghlxwxcb.cn/news/detail-548146.html

到了這里,關(guān)于用python對比兩個字典的差異的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 差異對比犀利手冊:使用 Partial Diff 插件在 VSCode 中比較代碼差異

    差異對比犀利手冊:使用 Partial Diff 插件在 VSCode 中比較代碼差異

    簡介: 在本教程中,我們將介紹如何在 Visual Studio Code(VSCode)編輯器中安裝和使用 Partial Diff 插件來進行源代碼文件的差異比較。Partial Diff 插件是一個強大且簡單的工具,可以幫助你更容易地查看和理解代碼的變化。在本教程中,我們將帶你從頭開始,一步一步地進行安裝

    2024年02月05日
    瀏覽(36)
  • 使用 Java 對比兩個PDF文檔之間的差異

    使用 Java 對比兩個PDF文檔之間的差異

    不論是在團隊寫作還是在個人工作中,PDF 文檔往往會經(jīng)過多次修訂和更新。掌握 PDF 文檔內(nèi)容的變化對于管理文檔有極大的幫助。通過對比 PDF 文檔,用戶可以快速找出文檔增加、刪除和修改的內(nèi)容,更好地了解文檔的演變過程,輕松地管理文檔。本文將介紹如何 在 Java 程序

    2024年02月08日
    瀏覽(19)
  • Java Stream比較兩個List的差異,并取出不同的對象

    可以使用Java8的Stream API來比較兩個List的差異,并取出不同的對象。 ? 1. 將兩個List轉(zhuǎn)換為Stream類型; ? 2. 調(diào)用Stream的filter方法,將不同的對象過濾出來; ? 3. 將過濾出的不同的對象轉(zhuǎn)換為List類型。 ????????上述代碼中,將兩個List類型的對象list1和list2轉(zhuǎn)換為Stream類型,并

    2024年02月08日
    瀏覽(84)
  • 如何在Python 查找兩個列表之間的差異?

    如何在Python 查找兩個列表之間的差異?

    在處理數(shù)據(jù)和進行列表操作時,經(jīng)常需要查找兩個列表之間的差異。Python 提供了多種方法來實現(xiàn)這個目標(biāo),從簡單的循環(huán)比較到使用內(nèi)置函數(shù)和庫函數(shù)等。本文將詳細(xì)介紹幾種常用的方法,幫助您在 Python 中查找兩個列表之間的差異。 最基本的方法是使用循環(huán)逐個比較列表中

    2024年02月11日
    瀏覽(16)
  • 使用python_opencv比較圖像差異/使用python_opencv找出兩張圖像的差異范圍

    目錄 1 創(chuàng)建conda環(huán)境 2 安裝python庫? 2.1 報錯?ModuleNotFoundError: No module named \\\'numpy\\\' 3 image_diff.py

    2024年02月05日
    瀏覽(22)
  • Python —— 將兩個列表組成一個字典

    場景: 在不需要遍歷的情況下將兩個列表組成一個字典 分別有列表A 和 列表B,將列表A作為字典的鍵,列表B作為字典的值 - zip函數(shù)的作用是將可迭代對象中對應(yīng)的元素給打包成元組并以列表的形式返回 字典創(chuàng)建方法 dict() 能夠?qū)⑦@種類型的對象直接轉(zhuǎn)為鍵值對格式,使用該

    2024年02月11日
    瀏覽(24)
  • Python|合并兩個字典的8種方法

    Python|合并兩個字典的8種方法

    在Python中,有多種方法可以通過使用各種函數(shù)和構(gòu)造函數(shù)來合并字典。在本文中,我們將討論一些合并字典的方法。 1. 使用方法update() 通過使用Python中的update()方法,可以將一個列表合并到另一個列表中。但是在這種情況下,第二個列表被合并到第一個列表中,并且沒有創(chuàng)建

    2024年02月09日
    瀏覽(26)
  • Python 圖像處理:對比兩張圖片的差異

    在圖像處理領(lǐng)域,對比兩張圖片的差異是一項常見的任務(wù)。Python 提供了許多強大的工具和庫,使我們能夠輕松地實現(xiàn)這一目標(biāo)。本文將介紹如何使用 Python 對比兩張圖片,檢測和可視化它們之間的差異。 在開始之前,我們首先需要定義圖像差異。圖像差異可以被理解為兩張圖

    2024年02月11日
    瀏覽(19)
  • Python中的比較兩個字符串

    Python中的比較兩個字符串

    ?? 個人網(wǎng)站:ipengtao.com 在Python編程中,字符串比較是一項常見且關(guān)鍵的操作,涵蓋了諸多方法和技巧。比較兩個字符串是否相等、大小寫是否一致,或者在一個字符串中尋找特定的子字符串,都是日常開發(fā)中經(jīng)常遇到的需求。除此之外,使用正則表達(dá)式進行模式匹配、比較

    2024年01月19日
    瀏覽(22)
  • 軟件測試|如何在 Python 中比較兩個列表

    軟件測試|如何在 Python 中比較兩個列表

    簡介 在Python中,比較兩個列表是一個常見的任務(wù),可以幫助你找出兩個列表之間的差異、共同元素或其他關(guān)系。本文將詳細(xì)介紹如何在Python中比較兩個列表的不同方法,包括使用循環(huán)、集合操作和列表推導(dǎo)式等。 方法1:使用循環(huán)比較列表 方法2:使用集合操作比較列表 Pyt

    2024年02月02日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包