Python3如何确定两个字典是否相等?

136

这似乎很琐碎,但我找不到内置或简单的方法来确定两个字典是否相等。

我想要的是:

a = {'foo': 1, 'bar': 2}
b = {'foo': 1, 'bar': 2}
c = {'bar': 2, 'foo': 1}
d = {'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 additional elements

我可以制作一个简短的循环脚本,但我无法想象我的情况是如此独特。


为什么这被标记为重复,并且链接到一个不同的问题,其中的答案并不能解答这个问题? - undefined
2个回答

229

==有效。

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

我希望上面的例子能对您有所帮助。


8
无法处理嵌套字典。 - Neil
11
嵌套字典的情况下可以正常使用,我已在Python 3.8中进行了测试。 - bappak
2
如果我们将ordereddictdict进行比较,它将无法工作。 - alper
1
但是如果是这样的呢:```In [1]: x = {"key": True}In [2]: y = {"key": 1}In [3]: x==y Out[3]: True``` - luca.giovagnoli
>>> 1 == TrueTrue @luca.giovagnoli>>> 1 == TrueTrue @luca.giovagnoli - undefined

76

老牌的==语句可以使用。


8
==可以使用。但对于大型词典,我建议先进行一个简单的检查,即比较键的数量。毕竟,如果一个字典有2个键,而另一个字典有10个键,则无需深入比较值。 - rbaleksandar
54
那是一个不错的想法,但并非必要。两个字典之间的 == 操作已经进行了很好的优化,并考虑了您提到的因素。 - Christian Callau
4
针对@Constantine32答案的跟进,这是Cython实现字典==操作的代码,完全遵循他所说的内容。https://hg.python.org/cpython/file/6f535c725b27/Objects/dictobject.c#l1839 - Scott Driggers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接