我有两个dictionary对象,它们非常复杂,是通过将大型xml文件转换为python字典创建的。你知道吗
我不知道字典的深度,只想比较一下,想要下面的输出。。。你知道吗
我的字典是这样的
d1 = {"great grand father":
{"name":"John",
"grand father":
{"name":"Tom",
"father":
{"name":"Andy",
"Me":
{"name":"Mike",
"son":
{"name":"Tom"}
}
}
}
}
}
d2也是一个类似的字段,但可能有任何一个字段丢失或更改如下
d2 = {"great grand father":
{"name":"John",
"grand father":
{"name":"Tom",
"father":
{"name":"Andy",
"Me":
{"name":"Tonny",
"son":
{"name":"Tom"}
}
}
}
}
}
字典比对结果应该是这样的-
Expected Key/Val : Me->name/"Mike"
Actual Key/Val : Me->name/"Tonny"
如果键“name”不存在于d2中的“Me”中,它应该提供以下输出
Expected Key/Val : Me->name/"Mike"
Actual Key/Val : Me->name/NOT_FOUND
我重复一遍,字典深度可以是可变的,也可以是动态生成的。这里的两本词典是作为例子。。。你知道吗
我在SO中看到的所有词典比较问题及其答案都是相关的固定深度词典。。。。。你知道吗
在这里我找到了一种比较任何两本字典的方法-
我试过各种不同深度的词典,为我工作过。代码不是那么模块化,只是供参考-
这是我的代码输出-
还可以尝试使用注释代码中给出的其他词典。。你知道吗
还有一件事-在期望的字典中检查密钥,并将其与实际的匹配。如果我们以交替的顺序传递字典,另一种方式匹配也是可能的。。。你知道吗
你真走运,我是作为我工作的项目的一部分做的。你知道吗
您需要一个递归函数,例如:
您可以先检查其中一个中不存在的密钥。 e、 克
然后比较值的类型,即检查值是dict还是list等
如果是,则可以使用dict\ u a/b值递归调用函数。递归调用时,传递differences数组。你知道吗
如果值的类型是列表,并且列表中可能包含字典,那么需要将列表转换为dict并调用转换后的字典上的函数。你知道吗
很抱歉,我不能帮更多,但我已经没有访问源代码。希望这足以让你开始。你知道吗
相关问题 更多 >
编程相关推荐