Seite 1 von 1

Wie Generator "zusammenführen"?

Verfasst: Freitag 6. Juni 2008, 09:55
von snafu
Hi!

Ich habe verschiedene Generator Objekte, die Inforamtionen von einer Website enthalten, welche ich mit mit BeautifulSoup bekommen habe:

Generator A: Name des Benutzers
Generator B: Stimmung des Benutzers
Generator C: Wann hat der User zuletzt die Stimmung geändert

Aus diesen drei Angaben will ich Tupel erzeugen nach dem Schema:

Code: Alles auswählen

ErstesElementGeneratorA = (ErstesElementGeneratorB, ErstesElementGeneratorC)
Damit ich zb sowas habe:

Code: Alles auswählen

Anna = ('schlechtgelaunt', 'vor 10 Minuten')
Anzeige wäre dann bspw mit:

Code: Alles auswählen

name = 'Anna'
mood, lastChange = moodInfo('Anna')
print name, mood, lastChange
Wie bekomme ich die oben beschriebene Umstrukturierung am elegantesten hin?

PS: Beispiel wie ein Generator erzeugt wurde (falls relevant) :

Code: Alles auswählen

names = (''.join(username(text=True))
                 for username in soup('a', target='_self'))

Verfasst: Freitag 6. Juni 2008, 10:25
von helduel
Moin,

schau dir mal die itertools an. Da gibt's eine izip-Funktion, die genau das macht, was du willst.

Gruß,
Manuel

Verfasst: Mittwoch 18. Juni 2008, 15:20
von snafu
Danke, ich mach's jetzt so:

Code: Alles auswählen

user = {}

for name, mood, change in izip(names, moods, lastChange):
    user[name] = (mood, change)

Verfasst: Mittwoch 18. Juni 2008, 18:44
von Y0Gi
Und weil jeder Einzeiler mag (;)):

Code: Alles auswählen

user = dict((name, (mood, change)) for name, mood, change in izip(names, moods, lastChange))

Verfasst: Mittwoch 18. Juni 2008, 20:19
von snafu
Danke, yogi. :)