web-dev-qa-db-fra.com

Comment vérifier que deux dictionnaires sont égaux avec pytest en python

Essayer d'affirmer que deux dictionnaires dont le contenu est imbriqué sont égaux (l'ordre n'a pas d'importance) avec pytest. Quelle est la façon pythonique de faire cela?

5
John Mike

Je suppose qu’un simple test d’égalité d’assertion devrait suffire

>>> 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
>>> d2
>>> 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
3
Szabolcs
assert all(v == actual_dict[k] for k,v expected_dict.items()) and len(expected_dict) == len(actual_dict)
1

votre question n'est pas très précise mais avec ce que je peux comprendre, vous essayez soit de vérifier si la longueur est la même 

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

ou en vérifiant si les valeurs de la liste sont les mêmes 

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

mais pour les dictionnaires, vous pouvez également utiliser

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

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