Python3确定两个字典是否相等

Mar*_*ner 8 python dictionary equality python-3.x

这看似微不足道,但我无法找到确定两个字典是否相等的内置或简单方法。

我想要的是:

a = {'foo': 1, 'bar': 2}
b = {'foo': 1, 'bar': 2}
c = {'bar': 2, 'foo': 1}
b = {'foo': 2, 'bar': 1}
e = {'foo': 1, 'bar': 2, 'baz':3}
f = {'foo': 1}


equal(a, b)   # True 
equal(a, c)   # True - order does not matter
equal(a, d)   # False - values do not match
equal(a, e)   # False - e has additional elements
equal(a, f)   # False - a has additioonal elements
Run Code Online (Sandbox Code Playgroud)

我可以编写一个简短的循环脚本,但是我无法想象我的是一个如此独特的用例

Sha*_*n26 15

== 作品

a = dict(one=1, two=2, three=3)
b = {'one': 1, 'two': 2, 'three': 3}
c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
d = dict([('two', 2), ('one', 1), ('three', 3)])
e = dict({'three': 3, 'one': 1, 'two': 2})
a == b == c == d == e
True
Run Code Online (Sandbox Code Playgroud)

希望以上示例对您有所帮助。

  • 不适用于嵌套字典 (8认同)
  • 对于嵌套字典来说工作得很好,我用 python3.8 进行了测试。 (3认同)
  • 如果我们将“ordereddict”与“dict”进行比较,则不起作用 (2认同)

Con*_*e32 7

好的旧==声明很有效。

  • 这是一种很好的思考方式,但没有必要。`==` 两个字典之间的优化非常好,并考虑了您提到的因素。 (29认同)
  • 为了跟进 @Constantine32 的答案,这里是 dict == 的 Cython 实现,它完全按照他所说的进行。https://hg.python.org/cpython/file/6f535c725b27/Objects/dictobject.c#l1839 (4认同)
  • `==` 有效。然而,对于大型字典,我会首先进行一个简单的检查,即比较键的数量。毕竟,如果一本字典有 2 个键,而另一本有 10 个键,则没有必要更深入地比较这些值。 (3认同)