【问题标题】:Python3 Determine if two dictionaries are equal [duplicate]Python3确定两个字典是否相等[重复]
【发布时间】:2019-04-20 07:08:19
【问题描述】:

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

我想要的是:

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

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

【问题讨论】:

    标签: python python-3.x dictionary equality


    【解决方案1】:

    == 有效

    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
    

    希望上面的例子对你有帮助。

    【讨论】:

    • 不适用于嵌套字典
    • 适用于嵌套字典,我用 python3.8 测试过。
    • 如果我们将 ordereddictdict 进行比较,则不起作用
    【解决方案2】:

    旧的 == 声明有效。

    【讨论】:

    • == 有效。但是,对于大型字典,我会先做一个简单的检查,即比较键的数量。毕竟,如果一个字典有 2 个键,而另一个有 10 个键,则无需深入比较值。
    • 这是一种很好的思维方式,但没有必要。两个字典之间的== 进行了很好的优化,并考虑了您提到的因素。
    • 为了跟进 @Constantine32 的回答,这里是 dict == 的 Cython 实现,它完全按照他的说法进行。 hg.python.org/cpython/file/6f535c725b27/Objects/…
    猜你喜欢
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 2022-12-04
    相关资源
    最近更新 更多