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

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.
htw7448
User
Beiträge: 51
Registriert: Montag 16. April 2007, 10:59
Wohnort: Messel(Hessen)
Kontaktdaten:

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

Beitragvon htw7448 » Dienstag 22. Januar 2008, 10:23

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
BlackJack

Beitragvon BlackJack » Dienstag 22. Januar 2008, 10:51

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*!?
htw7448
User
Beiträge: 51
Registriert: Montag 16. April 2007, 10:59
Wohnort: Messel(Hessen)
Kontaktdaten:

Beitragvon htw7448 » Dienstag 22. Januar 2008, 11:07

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 :) .
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Beitragvon Zap » Dienstag 22. Januar 2008, 11:39

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder