2010-05-04 24 views
6

Mam kilka zagnieżdżonych datastructures, każdy coś takiego:Jak porównać dwie złożone struktury danych?

[ ('foo', [ {'a':1, 'b':2}, 
       {'a':3.3, 'b':7} ]), 
    ('bar', [ {'a':4, 'd':'efg', 'e':False} ]) ] 

muszę porównać te struktury, aby zobaczyć, czy są jakieś różnice. Brak pisania funkcji, aby jawnie chodzić po strukturze, czy istnieje istniejąca biblioteka lub metoda wykonywania tego rodzaju rekurencyjnego porównania?

+0

co porównujesz do czego? – SilentGhost

+0

Czy potrzebujesz tylko sprawdzić, czy są one równe, czy nie, czy faktycznie znaleźć, gdzie różnią się? – doublep

+0

Znajdź, gdzie one się różnią, jeśli tak. –

Odpowiedz

5

Wbudowane typy agregacji (list, tuple, dict itd.) Już obsługują równość i porównanie relacyjne. W przypadku typów, które utworzysz, musisz wdrożyć rich comparison methods.

3

Twoje przykładowe struktury danych wykonają już odpowiednie testy równości, ponieważ używasz wbudowanych typów danych, które prawidłowo implementują __eq__ i __ne__, w tym rekursy do zagnieżdżonych wartości.

Jeśli chcesz dołączyć własne klasy, trzeba wdrożyć obu tych metod (należy pamiętać, że wdrożenie __eq__nie sugerować, że jeśli A! = Porównanie swój __eq__ zostanie wywołana, należy wdrożyć __ne__, także).

0

Jeśli nie potrzebuję używać diff w obrębie samego Pythona, prawdopodobnie zhakuję go. Konwertuj oba na yaml i uruchom na nich różnicę. : D

Powiązane problemy