Python:比较不同深度的dicts对的工具?

时间:2014-02-07 11:46:21

标签: python dictionary comparison

我有两对相当大的词组。对序列的结构完全相同,但值会有所不同。所有对都有不同的嵌套方式。

澄清:

  • dict_adict_b
  • 的结构相同
  • dict_cdict_d具有相同的结构(但与dict_a和dict_b不同)

等。

是否有工具可以轻松实现一个功能来比较,和/或对它们进行一些基本的算术运算?我的dicts可以完全嵌套,所以简单的[for k,v in dict_x.iteritems()...]不会。

1 个答案:

答案 0 :(得分:0)

听起来像......递归函数的问题!

基本上,如果我理解你的问题,你就会在未指定的键上有一个深度字典,深度不同。您想比较dict_adict_b的值,但不关心键:只是值的差异。这是一个使用递归函数打印出不匹配的每组值的想法。

def dict_compare(da, db):
    for k, v in da.iteritems():
        if isinstance(v, dict): #if the value is another dict:
            dict_compare(v, db[k]) #enter into the comparison function again!
        else:
            if v != db[k]: 
                print 'values not equal at', k

然后你就可以打电话了

dict_compare(dict_a, dict_b)

奇妙的是,如果给定键的值实际上是另一个字典,只需再次调用您的比较函数。

显然,如果你想做的事情比打印不匹配的值的简单键更复杂,只需修改if v != db[k]行之后发生的事情。