Bonsoir, je suis au TP du cour Python faire un dictionnaire ordonné, j'ai un problème avec la méthode __str__ ou plutôt ce qu'elle renvoie.
Il faut pouvoir afficher à l'aide de print() un pseudo-dictionnaire qui a pour clés une première liste et comme valeurs une deuxième liste.
exemple:
print(objet)
{'clef': 4, 'clef2': 2}
J'ai essayé avec ce code:
class DictionnaireOrdre:
"""classe qui permet se comporte commme un dictionnaire
mais qui a un ordre précis"""
def __init__(self,**dico):
"""quand l'objet se crée le dictionnaire
qui est rentré en argument est divisé en 2 listes"""
self.keys = [key for key in dico.keys()]
self.values = [values for values in dico.values()]
def __delitem__(self, clef):
"""méthode pour supprimer la clef
et la valeur"""
index = self.keys.index(clef)
del self.values[index]
del self.keys[index]
def __getitem__(self, clef):
"""méthode appelé quand on fait
objet[index]"""
try:
index = self.keys.index(clef)
return self.values[index]
except ValueError:
raise KeyError("Key {} is not in dict".format(clef))
def __setitem__(self, cle, valeur):
"""méthode qui ajoute cle + valeur
au dictionnaire, si la cle existe
on écrase la valeur associé, sinon
on ajoute le couple cle + valeur"""
if cle in self.keys:
index = self.keys.index(cle)
self.values[index] = valeur
else:
self.keys.append(cle)
self.values.append(valeur)
def __contains__(self, cle):
"""renvoi true si la cle est dans
le dictionnaire ou false si elle
n'y est pas"""
if cle in self.keys:
return True
else:
return False
def __len__(self):
"""renvoi le nombre d'items dans
le dictionnaire"""
return len(self.keys)
def __str__(self):
for index, clef in enumerate(self.keys):
dictionnaire = {
clef: self.values[index]
}
return dictionnaire
Quand je fais print(objet) et qu'auparavant j'ai crée deux listes comme listeKeys = [1,2,3,4] et listeValues = ['a','b','c','d']
le pseudo-dictionnaire renvoyé est {'4': d}, je ne comprend pas pourquoi cela ne me renvoi pas un dictionnaire avec toutes les clefs et valeurs.
Dans ta méthode str tu dois construire une chaîne de caractères non un objet dictionnaire
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)