Frage zu eigenem Wörterbuch

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Thuught
User
Beiträge: 28
Registriert: Mittwoch 3. Dezember 2008, 12:19

hallo zusammen,
ich habe folgenes Wörterbuch:

Code: Alles auswählen

class kante(dict):
	class pref: 
		def __init__(self,x,y): pass

	lexikon={}
	def set(self,(x,y)):
		self.lexikon[str(x)+str(y)]=Kanten.pref(x,y)
	def __getitem__(self,(x,y)):
		if str(x)+str(y) in self.lexikon: return self.lexikon[str(x)+str(y)]
		else: return self.lexikon[str(y)+str(x)]
Speicher ich die Daten jetz zweimal ab, weil ich ein extra Wörterbuch angelegt habe und außerdem von dict erbe. Ich seh da nicht durch
BlackJack

Thuught: Wenn Du nicht mehr durchsteigst, dann mach's doch einfach einfacher. Hör zum Beispiel auf von `dict` zu erben.

Und vielleicht solltest Du ein Tupel mit `x` und `y` als Schlüssel nehmen und nicht diese Zeichenkette, die Du da bastelst. Mal angenommen Du hast die Koordinaten 12, 3, die werden unter '123' gespeichert. Und die Koordinaten 1, 23? Huch - *auch* unter '123'. Nehme an, dass war nicht so gewollt.

Alternativ könnte man beim speichern und auslesen auch immer dafür sorgen, dass x < y gilt, bzw. falls das nicht gilt, die Koordinaten vertauschen.

"Innere Klassen" sind in Python äusserst ungewöhnlich.

Oh und `lexicon` gilt für alle Exemplare von `kanten` -- ist das gewollt?
Thuught
User
Beiträge: 28
Registriert: Mittwoch 3. Dezember 2008, 12:19

- doppelte Einträge sind erstmal nicht möglich und wenn dann durchaus erlaubt.
- Das ganze Konstrukt kommt aus einer Kantenklasse und einer Liste mir erzeugten Kanten. Irgenwann hab ich gemerkt, dass ich keine Liste haben will, sondern mit (<knoten A>, <knoten B>) genau die richtige Kanteninstanz erhalten will. Somit war die Idee eines eigenen Dictionairies geboren, weil man ja keine menge als keys haben darf

Letzendlich hab ich die dictklasse sehr,sehr verstümmelt bis zu dem Punkt, an dem ich ein echtes Wörterbuch aka "lexikon" als Klassenvariabel benutzt habe:oops: . __setitem__ braucht 2 Argumente, __repr__ darf nur str zurückgeben und all so Tücken.
BlackJack

Du kannst Tupel und `frozenset` als Schlüssel verwenden. Das mit den Zeichenkettendarstellungen der Objekte sieht ein wenig nach einem Hack aus.
Thuught
User
Beiträge: 28
Registriert: Mittwoch 3. Dezember 2008, 12:19

Frozensets hab ich doch glatt vergessen. Danke für den Hinweis. Damit lässt sich was machen.Eine Frage noch:
Wie lässt es sich am besten auf so ein set zugreifen? nur mit kante[frozenset([x,y])]?
Antworten