2010-05-04 19 views
6

Mi hanno alcune strutture di dati nidificati, ciascuno qualcosa di simile:Come si confrontano due strutture dati complesse?

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

ho bisogno di confrontare queste strutture, per vedere se ci sono delle differenze. A corto di scrivere una funzione per camminare esplicitamente sulla struttura, esiste una libreria o un metodo esistente per fare questo tipo di confronto ricorsivo?

+0

cosa stai comparando a cosa? – SilentGhost

+0

Hai bisogno di vedere se sono uguali o meno, o in realtà trovare dove si differenziano? – doublep

+0

Trova dove si differenziano, se lo fanno. –

risposta

5

I tipi di aggregazione incorporati (list, tuple, dict, ecc.) Supportano già l'uguaglianza e il confronto relazionale. Per i tipi creati, è necessario implementare lo rich comparison methods.

3

Le strutture dati di esempio eseguiranno già test di uguaglianza appropriati, poiché si utilizzano tipi di dati incorporati che implementano correttamente __eq__ e __ne__, inclusa la ricorsione in valori nidificati.

Se si desidera includere le proprie classi, è necessario implementare entrambi questi metodi (si noti che l'implementazione di __eq__non si implica che se si fa un! = Confronto tua __eq__ saranno chiamati, è necessario implementare __ne__, pure).

0

Se non ho bisogno di usare il diff all'interno di Python stesso, probabilmente finirebbe per hackerarlo. Converti entrambi in yaml ed esegui un diff su di essi. : D

Problemi correlati