J'ai l'objet suivant que j'aimerais conserver dans un conteneur qui est trié lors de l'insertion et qui ne contient pas de doublons, j'utilise donc un fichier SortedSet
from sortedcontainers import SortedSet, SortedList
class R():
def __hash__(self):
return hash(self.person_id)
def __eq__(self, other):
return self.__class__ == other.__class__ and self.person_id == other.person_id
def __nq__(self, other):
return not (self == other)
def __lt__(self, other):
return other.value < self.value
def __init__(self, person_id, value):
self.person_id = person_id
self.value = value
def __repr__(self):
return "person: %s (%s)" % (self.person_id, self.value)
x = SortedSet()
x.add(R(13, 2))
x.add(R(17, 4))
x.add(R(11, 21))
x.add(R(7, -41))
print(x)
Lorsque j'exécute ce code, j'obtiens le résultat suivant, comme prévu :
SortedSet([personne : 11 (21), personne : 17 (4), personne : 13 (2), personne : 7 (-41)])
Cependant, si j'ajoute un élément supplémentaire en double, c'est-à-dire 17 :
x.add(R(13, 2))
x.add(R(17, 4))
x.add(R(11, 21))
x.add(R(7, -41))
x.add(R(17, -67))
print(x)
Je m'attends à ce que l'objet R avec l'id 17 soit nommé person: 17 (4)
à déplacer vers l'arrière avec valeur person: 17 (-67)
comme :
SortedSet([personne : 11 (21), personne : 13 (2), personne : 7 (-41), personne : 17 (-67)])
Cependant, rien ne change :
SortedSet([personne : 11 (21), personne : 17 (4), personne : 13 (2), personne : 7 (-41)])
Comment puis-je obtenir le résultat désiré tel que décrit en utilisant une SortedSet
ou tout autre conteneur qui est trié à l'insertion et qui n'a pas de doublons ?