Es ist am besten, anhand eines Beispiels zu zeigen. Ich nehme das Feld "Eigenschaften" aus einem Matplotlib-Plot. Es ist ein Wörterbuch mit verschiedenen Schlüsseln und Werten.Vergleichen Sie zwei Wörterbücher mit verschiedenen Datentypen als Werte
keys = gca().properties().keys
ax1 = gca().properties()
Dann Plotten ich etwas anderes und ich nehme eine andere Instanz
ax2 = gca().properties()
Nimmt man nun an die gleichen Tasten gelten für ax2 (ich glaube, sie sind, da ich nicht die Plottyp geändert hat), wie kann ich die Werte ax1 und ax2 vergleichen? Diese Werte sind alle unterschiedliche Datentypen und der einfache Vergleich funktioniert nicht. Ich habe versucht,
for key in keys:
if ax1[key]!=ax2[key]:
print(key,ax1[key])
Worauf ich
bekommenTraceback (most recent call last):
File "<ipython-input-46-363fb313494e>", line 2, in <module>
if ax1[key]!=ax2[key]:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
ich tatsächlich den Namen und die Werte der Felder finden möchten, die zwischen den beiden Grundstücke sind unterschiedlich. Gibt es einen Weg, mit solch einer komplexen Datenstruktur umzugehen?
Die Antwort ist gültig, aber nach dem Versuch erkannte ich, dass die Ploteigenschaften sehr tief verschachtelt sind. Zum Beispiel ist die Linienfarbe bei 'gca(). Properties() ['lines'] [0] .get_color()'. Gibt es eine Möglichkeit, Linienfarben von zwei Plots (ax1 und ax2) zu vergleichen, ohne die Eigenschaft explizit zu benennen? Ich möchte alle Eigenschaften vergleichen und nur diejenigen finden, die unterschiedlich sind. – Aguy
@Theguy Ja, aber wenn der Gleichheitsvergleich in diesen Datentypen korrekt implementiert ist, sollte der obige Code 'gca(). Properties() ['lines'] [0]' vergleichen und der Vergleich würde 'False' zurückgeben. Wenn die Gleichheit nicht korrekt implementiert wird, wird fast immer "False" zurückgegeben. In jedem Fall, wenn es nicht funktioniert oder wenn Sie einen detaillierteren Vergleich wünschen, müssen Sie weitere Spezialfälle hinzufügen und manuell tiefer gehen ... es gibt keine integrierte "make the Diff von zwei generischen Objekten" in Python. – Bakuriu