chr*_*mar 2 python dictionary python-3.x
我有 2 个字典,我想了解它们的差异。为此,我使用了非常好的deepDiff 模块。可以添加参数“exclude_paths”,但问题是我想排除一个我不知道的路径,因为我的字典太大了。
喜欢:
root['thiskeyiknow']['idontknowthiskey']['idontknowthiskey']['iknowthiskey']
Run Code Online (Sandbox Code Playgroud)
那么有没有办法排除所有这样的路径:
root['thiskeyiknow']['everykeyispossiblehere']['everykeyispossiblehere']['thiskeyshouldbeexcluded']
Run Code Online (Sandbox Code Playgroud)
在 unix 中,它会是 * 表示一切……python 中有什么东西说:“这里可以放任何东西吗?”
我已经尝试过这样的事情:
root['key1']['']['']['keyiwanttoexclude']
Run Code Online (Sandbox Code Playgroud)
但它没有用。
所以如果我有这样的字典:
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)
Run Code Online (Sandbox Code Playgroud)
输出应该是:
{}
Run Code Online (Sandbox Code Playgroud)
输出不应该是:
{" root['key1']['key2']['key3']['key4']" : {
'new_value' = 'bla'
'old_value' = 'fasl'
}
Run Code Online (Sandbox Code Playgroud)
所以我能够做到。
解决方案:
使用排除的正则表达式字符串制作一个列表:
经验:
excludedRegex = [
r"root['key1'][.+?][.+?]['key4']"
etc.
]
Run Code Online (Sandbox Code Playgroud)
然后将排除列表添加到 deepdict
diff = deepdiff.DeepDiff(dict1,dict2,exclude_regex_paths=excludeRegex)
Run Code Online (Sandbox Code Playgroud)
这就是全部
归档时间: |
|
查看次数: |
1610 次 |
最近记录: |