Seite 1 von 1

zeitsparende Version für stringextraxtion aus ´´dict´´´

Verfasst: Dienstag 22. Januar 2008, 10:23
von htw7448
Vorweg ich glaube die Lösung ist recht simpel leider komme ich nicht auf den Trichter. Folgendes ist gegeben:

eine liste:

Code: Alles auswählen

alist = {(1, 13): ['part1', 'part3'], (56, 78):['part4'], (120, 160):['part10', 'part13', 'part15'] ... }
und eine entsprechende Liste mit den zu suchenden Tupeln, z.B.:

Code: Alles auswählen

searchlist =[(1, 13), (120, 160)]
herauskommen soll dann:

Code: Alles auswählen

newlist = ['part1', 'part3', 'part10', 'part13', 'part15']
bisher kann ich die Listen des dict nicht vernüftig auflösen

Code: Alles auswählen

newlist = []

for akey in searchlist:
		if alist.has_key(akey) == 1:
				newlist.append(alist[akey])
Die alist ist dementsprechend lang. Ich hoffe ihr könnt mir helfen.

MfG

Verfasst: Dienstag 22. Januar 2008, 10:51
von BlackJack
Die ``if``-Abfrage ist sehr umständlich und hässlich. Mit 1 muss man das nicht mehr vergleichen, das Ergebnis von `dict.has_key()` ist ja schon ein Wahrheitswert.

Ich nehme mal an, Du möchtest so etwas (ungetestet):

Code: Alles auswählen

result = list()
for key in keys:
    result.extend(data.get(key, []))
Ich habe die Namen mal geändert. `alist` für ein *Dictionary*!?

Verfasst: Dienstag 22. Januar 2008, 11:07
von htw7448
ja die Namensgebung war sehr unausgegoren :oops: . Ansonsten hab ich da wohl append() und extend() vertauscht.

was ich noch nicht wusste war das der Wahrheitswert sowieso automatisch verarbeitet wird, also die for schleife nur ausgeführt wird wenn das Tupel als Key in data auftaucht. Danke :) .

Verfasst: Dienstag 22. Januar 2008, 11:39
von Zap
Ich glaub das du da etwas missverstanden hast.

Die For-Schleife durchläuft eh nur die Elemente die in deiner "searchlist" bzw "keys" vorhanden sind. Die Prüfung ob ein key in einem dict vorhanden ist macht man nicht mehr mit haskey sondern mit:

Code: Alles auswählen

if key in my_dict:
    pass
In dem Beispiel von BlackJack brauchst du diese Prüfung aber nicht, da er die Methode .get() verwendet welcher man einen Defaultwert mitgeben kann. Diesen erhält mann immer dann wenn es einen key nicht im Dictionary gibt.