Nach Objekt in Liste suchen

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
Benutzeravatar
Kuttengeier
User
Beiträge: 27
Registriert: Freitag 17. August 2007, 07:04

Hallo liebe User,

ich habe mal wieder ein Problem. Und zwar möchte ich ein Objekt aus einer Liste von Objekten suchen und mit diesem dann arbeiten. Es z.B. aus der Liste löschen. Mir will aber nicht einfallen, wie ich das sinnvoll ohne Indexgebrauch oder ohne Schleifen hinbekomme.

Die Objekte, die sich in der Liste befinden sind wie folgt aufgebaut:

object.id
object.title
object.content

Jedes der Objekte hat andere Feldinhalte. Uebergeben wird aber nur die id.

Wie schaffe ich es jetzt, dass ich nur nach der ID suche, und mit dem entsprechenden Objekt arbeiten kann. Möglichst ohne Listen Indizes.

Mit freundlichem Gruß,
Kuttengeier
Benutzeravatar
penguin-p
User
Beiträge: 22
Registriert: Sonntag 19. August 2007, 13:47

Du könntest statt einer Liste ein Dictionary benutzen mit den Objekt-IDs als Schlüssel und den Objekten als Werte.
Dann kannst du direkt über die Objekt-ID auf das Objekt zugreifen.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Z. B. so

Code: Alles auswählen

>>> class O(object):
	def __init__(self, id_):
		self.id = id_
		self.content = 42
	def __repr__(self):
		return "<O id:%i content:%s>" % (self.id, self.content)

	
>>> liste = [O(1), O(2), O(3), O(4)]
>>> print liste
[<O id:1 content:42>, <O id:2 content:42>, <O id:3 content:42>, <O id:4 content:42>]
>>> objekte_mit_id_2 = [x for x in liste if x.id == 2]
>>> print objekte_mit_id_2
[<O id:2 content:42>]
>>> erstes_ergebnis = objekte_mit_id_2[0]
>>> print erstes_ergebnis
<O id:2 content:42>
>>> liste.remove(erstes_ergebnis)
>>> print liste
[<O id:1 content:42>, <O id:3 content:42>, <O id:4 content:42>]
Das funktioniert, weil Python immer mit Referenzen arbeitet
Benutzeravatar
Kuttengeier
User
Beiträge: 27
Registriert: Freitag 17. August 2007, 07:04

Ok, werde ich mir demnächst mal anschauen.

Habe leider die letzte Zeit wenig Zeit/Lust gehabt mich damit auseinanderzusetzen. Deswegen der etwas verspätetete beitrag. Aber ich werde von meinen erfolgen berichten :)

Mit freundlichem Gruß
Kuttengeier
Antworten