Как сравнить две сложные структуры данных? - PullRequest
6 голосов
/ 04 мая 2010

У меня есть несколько вложенных структур данных, каждая что-то вроде:

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

Мне нужно сравнить эти структуры, чтобы увидеть, есть ли различия. Если не считать написания функции для явного обхода структуры, существует ли существующая библиотека или метод для такого рода рекурсивного сравнения?

Ответы [ 3 ]

6 голосов
/ 04 мая 2010

Встроенные типы агрегации (list, tuple, dict и т. Д.) Уже поддерживают равенство и реляционное сравнение. Для типов, которые вы создаете, вам нужно реализовать богатые методы сравнения .

3 голосов
/ 04 мая 2010

В ваших примерных структурах данных уже будет проведено соответствующее тестирование на равенство, поскольку вы используете встроенные типы данных, которые правильно реализуют __eq__ и __ne__, включая повторное использование во вложенных значениях.

Если вы хотите включить свои собственные классы, вам нужно реализовать оба этих метода (обратите внимание, что реализация __eq__ не подразумевает, что если вы сделаете сравнение! =, Ваше __eq__ будет Вызов, вы должны реализовать __ne__ тоже).

0 голосов
/ 11 сентября 2014

Если мне не нужно использовать diff внутри самого Python, я, вероятно, в итоге взломаю его. Преобразуйте оба в yaml и запустите их. : D

...