【问题标题】:How do I compare two complex data structures?如何比较两个复杂的数据结构?
【发布时间】:2011-02-15 09:54:34
【问题描述】:

我有一些嵌套的数据结构,每个都类似于:

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

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

【问题讨论】:

  • 你在比较什么?
  • 您是否只需要查看它们是否相等,或者实际找到它们的不同之处?
  • 找出它们不同的地方,如果有的话。
  • 要了解它们的不同之处,请查看:stackoverflow.com/a/26171760/5069869

标签: python data-structures comparison


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    如果您想包含自己的类,则需要实现这两种方法(请注意,实现 __eq__ 并不意味着如果您进行 != 比较,您的 __eq__ 将被调用,你也必须实现__ne__)。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-19
        • 2020-09-26
        • 1970-01-01
        • 2012-12-24
        相关资源
        最近更新 更多