Je parcours deux instances de la même classe afin de vérifier l'égalité. Ces deux instances de cette classe sont créées par différents moyens: l'un à partir d'un pickle, et l'autre à partir d'un document json.Trier les deux éléments d'un tuple, en ignorant le cas, dans une liste, de sorte que les clés d'un dictionnaire s'alignent correctement
Je parcours les propriétés de ces objets pour vérifier l'égalité, mais les clés des dictionnaires ne sont pas toujours alignées, donc elles ne peuvent pas être comparées correctement. J'ai donc essayé de trier ces tuples, mais je ne peux pas toujours obtenir la même clé de ces deux objets en raison de la casse.
Une tentative me donne le côté gauche triés:
def __eq__(self, other):
for (self_key, other_key) in sorted(
zip(self.__dict__, other.__dict__),
key=lambda element: (element[0].lower(), element[1].lower())):
print self_key, " ", other_key
....
qui sort
alpha VAR_THRESH
chunksize VAR_MAXITER
decay decay
....
Et si je fais explicitement que le côté droit lower()
je reçois le contraire: par exemple
....
key=lambda element: (element[0], element[1].lower())):
....
Le côté gauche n'est pas trié par le bas.
VAR_MAXITER alpha
VAR_THRESH chunksize
alpha VAR_THRESH
chunksize VAR_MAXITER
decay decay
Si je laisse le .lower()
sur les deux éléments, je reçois le second exemple. Comment puis-je m'assurer que les bonnes clés sont toujours alignées? Ou en d'autres termes, comment puis-je trier par les deux valeurs dans les tuples, en ignorant le cas, de sorte qu'ils s'alignent toujours?
Ordre est hors de propos, si les dicts ont-ils compareront les mêmes objets égaux –