如何从递归字典检查返回差异量



我正在检查两个字典的键,值的差异。但是我能够打印差异,但我想将结果保存在变量中(是否存在差异,或者有多少差异(。

def findDiff(d1, d2, path="", differences = 0):
for k in d1:
if (k not in d2):
print (path, ":")
print (k + " as key not in d2", "n")
differences += 1
else:
if type(d1[k]) is dict:
if path == "":
path = k
else:
path = path + "->" + k
findDiff(d1[k], d2[k], path, differences)
else:
if d1[k] != d2[k]:
print (path, ":")
print (" - ", k," : ", d1[k])
print (" + ", k," : ", d2[k])
differences += 1
return differences
a = findDiff(moot_params, database_params)
print(a)

但是,如果最后一个字典不包含任何差异,则始终会导致 None。

有谁知道我如何使用这个递归返回一个值?

您必须将findDiff(d1[k], d2[k], path, differences)更改为differences += findDiff(d1[k], d2[k], path)的原因(如我在注释中指出的那样(是因为 Python 参数是通过赋值传递的,并且整数是不可变的。要在整数中进行更改,而不是将其传递到函数中并在内部更改它,您应该返回从内部更改它的程度(如链接的示例所示(。

如果您还不太了解链接和整数不变性,简单来说,这意味着当您在findDiff(d1[k], d2[k], path, differences)中修改differences时,您在"外部"上已有的differences不会被修改。解决方案是使用+=显式更改differences,提供您想要的递归功能。

最新更新