Unterschied in einem dict
Ich versuche, herauszufinden, den Unterschied in einem dict, ob etwas Hinzugefügt oder entfernt wurde und aus was.
Hier ist ein Fall, wo ein Wert Hinzugefügt:
original = {0: None, 1: False, 2: [16]}
new = {0: None, 1: False, 2: [2, 16]}
difference = True, {2: 2} # True = Added
Und hier ist ein Fall, in dem ein Wert gelöscht:
original = {0: None, 1: False, 2: [16, 64]}
new = {0: None, 1: False, 2: [64]}
difference = False, {2: 16} # False = Removed
Das problem ist, dass ich keine Ahnung habe, wie zu erhalten die Differenz. Sollte jemand zufällig wissen, wie ein solches Ergebnis zu erzielen?
Zusätzliche Informationen (keine Ahnung, ob Sie benötigen diese):
- Diese anwenden können, um 0 und 1 original und neu, wie gut.
- 1 und 2 nicht gleichzeitig aktiv sind. Wenn man Werte hat, die andere ist Falsch.
- Warum nicht mal ein "wrapper" um dict und verwenden Sie es zu verfolgen, wenn die Dinge Hinzugefügt/entfernt? (Ich weiß nicht, wie schwer das wäre in python, aber es ist ziemlich einfach in c#).
- Dein problem ist unter bestimmten. Was passiert, wenn ich entfernen Sie die 16 und add 2 in deinem ersten Beispiel? Unterschied müsste beides sein, Wahr und Falsch zur gleichen Zeit.
- Nehmen wir an, dass wird nie passieren, phooji. 🙂
- mögliche Duplikate von Schnellen Vergleich zwischen zwei Python dictionary
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie ich erklärt habe in einer andere Frage es gibt eine Bibliothek auf PyPI nur für diese Aufgabe, die datadiff Bibliothek. Es ist einfach zu bedienen und Sie können mit dem output zu tun, was Sie zu tun haben.
Ich finde das ziemlich gut lesbar:
Hier ist ein link zu einer Funktion, die produzieren kann ein "diff" der beiden Wörterbücher, gefolgt von zusätzlichen Kommentare/code-Beispiele:
http://code.activestate.com/recipes/576644-diff-two-dictionaries/
Darunter folgenden code:
können Sie vorübergehend übertragen dic[2] zu einem
set
in python, und verwenden Sie-
man den UnterschiedWas über so etwas wie:
Getan werden kann, dass in einer Zeile.