是否可以在不知道键的情况下在deepdiff中排除字典路径

时间:2019-08-02 10:44:19

标签: python python-3.x dictionary

我有2个字典,我想了解它们的区别。为此,我使用了极好的deepDiff module。可以添加arg“ exclude_paths”,但是问题是我想排除一个我不知道的路径,因为我的命令太大了。

赞:

root['thiskeyiknow']['idontknowthiskey']['idontknowthiskey']['iknowthiskey']

所以有一种方法可以排除所有类似于以下内容的路径:

root['thiskeyiknow']['everykeyispossiblehere']['everykeyispossiblehere']['thiskeyshouldbeexcluded']

在Unix中,它将是*,表示所有内容……在python中是否有东西说:“这里可以放任何东西吗?”

我已经尝试过这样的事情:

root['key1']['']['']['keyiwanttoexclude']

但是没有用。

所以,如果我有这样的字典:

dict1 = {"key1":{key2:{key3:{key4: "bla"}}}}
dict2 = {"key1":{key2:{key3:{key4: "fasl"}}}}


excludePaths = [

    "root['key1'][all][all]['key4']"

]

diff = deepdiff.DeepDiff(dict1,dict2,exclude_paths=excludePaths)

输出应为:

{}

输出不应为:

{" root['key1']['key2']['key3']['key4']" : {

'new_value' = 'bla'
'old_value' = 'fasl'

}

1 个答案:

答案 0 :(得分:1)

所以我能够做到。

解决方案:

使用排除的正则表达式字符串制作一个列表:

exp:

excludedRegex = [
     r"root['key1'][.+?][.+?]['key4']"
     etc.
]

然后将排除列表添加到Deepdict

diff = deepdiff.DeepDiff(dict1,dict2,exclude_regex_paths=excludeRegex)

仅此而已