Ich möchte die Unterschiede zwischen zwei verschachtelten Wörterbüchern extrahieren und ich möchte, dass das Ergebnis den vollständigen Wörterbuchschlüsselpfad enthält. Ich habe Python 2.7 und DeepDiff installiert, was die beste Option für das zu sein scheint, was ich erreichen möchte. Ich versuche zu bestimmen, wie man die Ausgabe von DeepDiff ändert, so dass es den vollständigen Wörterbuchpfad und die Werte bereitstellt, anstatt eine Menge, die ich nicht indizieren kann. Gibt es eine bessere Möglichkeit, die Ausgabe zu ändern (anstatt die Ausgabe zurück in ein Wörterbuch zu konvertieren)?Finden Sie die Unterschiede zwischen verschachtelten Wörterbüchern, die Listen enthalten
Code:
from __future__ import print_function
from deepdiff import DeepDiff
knownAPs = {'WLC1': {'10.1.1.1': {'72.6': ['AP22', 'city'], '55.1': ['AP102', 'office']}}, 'WLC2': {'10.1.1.2': {}}}
discoveredAPs = {'WLC1': {'10.1.1.1': {}}, 'WLC2': {'10.1.1.2': {}}}
ddiff = DeepDiff(knownAPs, discoveredAPs)
if 'dic_item_added' in ddiff.keys():
print('Item added to known: ' + str((ddiff['dic_item_added'])))
if 'dic_item_removed' in ddiff.keys():
DisAssociatedAPs = (list(list(ddiff['dic_item_removed'])))
for i in DisAssociatedAPs:
fullkeypath = (str(i).strip('root'))
ControllerName = (fullkeypath[0])
ControllerIP = (fullkeypath[1])
AccessPointIndex = (fullkeypath[2])
print('AP: ' + str(knownAPs + fullkeypath) + ' on controller: ' + str(ControllerName) + ' was removed from the known database')
if 'values_changed' in ddiff.keys():
print('Item changed: ' + str((ddiff['values_changed'])))
Ausgabe
Traceback (most recent call last):
File "C:/xxx/testdic4.py", line 15, in <module>
print('AP: ' + str(knownAPs + fullkeypath) + ' on controller: ' + str(ControllerName) + ' was removed from the known database')
TypeError: unsupported operand type(s) for +: 'dict' and 'str'
Process finished with exit code 1
Bevorzugte Ausgangs
AP: ['AP22', 'city'] on controller: ['WLC1'] was removed from the known database
AP: ['AP102', 'office'] on controller: ['WLC1'] was removed from the known database
Im Moment haben Sie * keine * Ausgabe, erwartet oder nicht, weil Sie versuchen, ein Diktat und eine Zeichenfolge hinzuzufügen (irgendwo konnte man nicht gestört werden, zu identifizieren). –
Hallo Scott. Aus dem Fehler kann ich sehen, dass ich ein Wörterbuch und eine Zeichenfolge nicht verketten kann. Ich bin ein Anfänger Programmierer und daher, warum ich um Anleitung bitten, wie dies zu tun ist. Gibt es ein anderes Forum, das ich benutzen sollte, um grundlegende Fragen zu stellen? – zeepi
@zeepi Wenn Sie Code schreiben, der einen Fehler verursacht, sollten Sie das Traceback bereitstellen, damit wir leicht sehen können, welche Codezeile den Fehler verursacht hat. –