超實(shí)用!深度比較Python對(duì)象之間的差異
很多情況下我們需要對(duì)兩條數(shù)據(jù)之間的差異進(jìn)行比較,如果僅僅是針對(duì)數(shù)值型對(duì)象,那么兩者的差值就是所謂的差異,但是如果要比較兩條JSON數(shù)據(jù)間的差異呢?
由于JSON數(shù)據(jù)具有可嵌套可分層的特點(diǎn),想要明確找出兩條JSON數(shù)據(jù)間的差異并加以描述,如果自己書寫方法還是有些費(fèi)事。這種情況我們就可以使用到第三方庫(kù)deepdiff中的DeepDiff()方法,它基于遞歸對(duì)不同對(duì)象進(jìn)行深度比較。
使用pip install deepdiff完成安裝之后,通過(guò)from deepdiff import DeepDiff導(dǎo)入所需功能,就可以直接對(duì)兩個(gè)JSON對(duì)象之間的差異進(jìn)行比較,下面是一個(gè)簡(jiǎn)單的例子:
from deepdiff import DeepDiff
obj1 = {
'level1': [
{
'level1-1': 1,
'level1-2': 1,
'level1-3': [
{
'level1-3-1': [1, 2, 3]
}
]
}
],
'level2': 'a'
}
obj2 = {
'level1': [
{
'level1-1': 1,
'level1-2': 1,
'level1-3': [
{
'level1-3-1': [1, 2, 1]
}
]
}
],
'level2': 'b'
}
DeepDiff(obj1, obj2)
可以看到打印的檢測(cè)結(jié)果中具體聲明了差異內(nèi)容及具體位置,可以幫助我們開展后續(xù)其他處理。
除此之外,deepdiff還具有非常豐富的額外功能,譬如忽略對(duì)指定類型數(shù)據(jù)的比較檢查:
亦或是通過(guò)定義層次規(guī)則,令DeepDiff()跳過(guò)對(duì)指定位置元素的差異檢查:
還支持利用正則表達(dá)式定義要忽略的模糊層次規(guī)則,譬如下面的例子中我們使用正則批量忽略了多個(gè)鍵值對(duì):
限制針對(duì)浮點(diǎn)數(shù)的檢查精度,譬如下面的例子中限定significant_digits=2后,小數(shù)點(diǎn)后第二位以后的差異便被忽略:
? ?