如何比较两个复杂的数据结构?

时间:2010-05-04 10:44:30

标签: python data-structures comparison

我有一些嵌套的数据结构,每个都是这样的:

[ ('foo', [ {'a':1, 'b':2},
                 {'a':3.3, 'b':7} ]),
  ('bar', [ {'a':4, 'd':'efg', 'e':False} ])   ]

我需要比较这些结构,看看是否有任何差异。如果没有编写显式遍历结构的函数,是否有现有的库或方法进行这种递归比较?

3 个答案:

答案 0 :(得分:6)

内置聚合类型(listtupledict等)已经支持相等和关系比较。对于您创建的类型,您需要实现rich comparison methods

答案 1 :(得分:3)

您的示例数据结构已经进行了适当的相等性测试,因为您正在使用正确实现__eq____ne__的内置数据类型,包括递归到嵌套值。

如果您想要包含自己的类,则需要实现这两种方法(请注意,实施__eq__ 不会暗示如果您执行!=比较您的{{ 1}}将被调用,你也必须实现__eq__

答案 2 :(得分:0)

如果我不需要在Python本身中使用差异,我可能最终会破解它。将两者都转换为yaml,并在它们上运行diff。 :d