Я имею, некоторые вложили datastructures, каждый что-то как:
[ ('foo', [ {'a':1, 'b':2},
{'a':3.3, 'b':7} ]),
('bar', [ {'a':4, 'd':'efg', 'e':False} ]) ]
Я должен сравнить эти структуры, чтобы видеть, существуют ли какие-либо различия. За исключением записи функции для явного обхода структуры, там существующая библиотека или метод выполнения этого вида рекурсивного сравнения?
Встроенные типы агрегирования ( список
, кортеж
, dict
и т. Д.) Уже поддерживают равенство и реляционное сравнение. Для создаваемых вами типов необходимо реализовать расширенные методы сравнения .
Структуры данных вашего примера уже будут выполнять соответствующее тестирование на равенство, потому что вы используете встроенные типы данных, которые правильно реализуют __ eq __
и __ ne __
, включая рекурсию во вложенные значения.
Если вы хотите включить свои собственные классы, вам необходимо реализовать оба этих метода (обратите внимание, что реализация __ eq __
не означает , что если вы выполните! = Сравните ваши __ eq__
будет вызываться, вы также должны реализовать __ ne __
).