所以我有一个python字典,称为d1
,稍后还有一个版本,称为d1
。我想找出d1
和d2
之间的所有变化。换句话说,所有添加、删除或更改的内容。棘手的一点是,值可以是it、string、list或dict,因此它需要是递归的。这就是我到目前为止所知道的:
def dd(d1, d2, ctx=""):
print "Changes in " + ctx
for k in d1:
if k not in d2:
print k + " removed from d2"
for k in d2:
if k not in d1:
print k + " added in d2"
continue
if d2[k] != d1[k]:
if type(d2[k]) not in (dict, list):
print k + " changed in d2 to " + str(d2[k])
else:
if type(d1[k]) != type(d2[k]):
print k + " changed to " + str(d2[k])
continue
else:
if type(d2[k]) == dict:
dd(d1[k], d2[k], k)
continue
print "Done with changes in " + ctx
return
它工作得很好,除非值是一个列表。我想不出一个优雅的方法来处理列表,除非在if(type(d2) == list)
之后重复这个函数的一个巨大的、略微变化的版本。
有什么想法吗?
编辑:这不同于this post,因为键可以改变
https://stackoverflow.com/questions/5903720
复制相似问题