【发布时间】:2020-10-12 03:47:15
【问题描述】:
我正在检查两个字典中键、值的差异。但是我可以打印差异,但我想将结果保存在一个变量中(是否存在差异,或者有多少差异)。
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)是否有效? -
是的!有时解决方案并不那么复杂。感谢您的清新外观
-
好吧,我会写一个答案来解释为什么该修复有效。
-
我鼓励您在自己的脑海中澄清
findDiff()的目的:它的目的是返回有关两个字典之间差异的信息(即返回数据);还是要打印有关两个字典之间差异的信息(即打印内容)?编写函数时,选择其中一个,而不是两者都选。而且,真的,唯一明智的选择是第一个(返回数据),因为如果你在那个部分做得很好,几乎总是很容易编写一个不同的函数来获取该信息并以各种方式打印出来。 -
感谢FMc的建议,对于程序来说只需要获取修改量即可。 (差异),但是如果有差异,打印实际差异以避免手动搜索它是有用的。但我同意,唯一的目的应该是一个标志:是否相等(我可以返回一个布尔值)
标签: python python-3.x dictionary recursion