web-dev-qa-db-ja.com

pythonのpytestで2つの辞書が等しいことをテストするには

Pytestで、ネストされたコンテンツを持つ2つの辞書が互いに等しい(順序は関係ありません)と断言しようとします。これを行うPythonの方法は何ですか?

12
John Mike

単純なアサート等価テストは大丈夫だと思います:

>>> d1 = {n: chr(n+65) for n in range(10)}
>>> d2 = {n: chr(n+65) for n in range(10)}
>>> d1 == d2
True
>>> l1 = [1, 2, 3]
>>> l2 = [1, 2, 3]
>>> d2[10] = l2
>>> d1[10] = l1
>>> d1 == d2
True
>>> class Example:
    stub_prop = None
>>> e1 = Example()
>>> e2 = Example()
>>> e2.stub_prop = 10
>>> e1.stub_prop = 'a'
>>> d1[11] = e1
>>> d2[11] = e2
>>> d1 == d2
False
4
Szabolcs
assert all(v == actual_dict[k] for k,v expected_dict.items()) and len(expected_dict) == len(actual_dict)

あなたの質問はあまり具体的ではありませんが、私が理解できることでは、長さが同じかどうかを確認しようとしています

a = [1,5,3,6,3,2,4]
b = [5,3,2,1,3,5,3]

if (len(a) == len(b)):
    print True
else:
    print false

またはリストの値が同じかどうかを確認する

import collections

compare = lambda x, y: collections.Counter(x) == collections.Counter(y)
compare([1,2,3], [1,2,3,3])
print compare #answer would be false
compare([1,2,3], [1,2,3])
print compare #answer would be true

ただし、辞書には

x = dict(a=1, b=2)
y = dict(a=2, b=2)

if(x == y):
    print True
else:
    print False
1