Liste in Dictionary wandeln mit den Keys "0", &

Code-Stücke können hier veröffentlicht werden.
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Liste in Dictionary wandeln mit den Keys "0", &

Beitragvon Dookie » Samstag 22. Februar 2003, 13:59

Hallo zusammen,

Code: Alles auswählen

to_Dict = lambda t: dict(map(None, map(lambda x: str(x), xrange(len(t))), t))

macht aus einer Liste oder einem Tuple ein Dictionary. Benötigt mindestens Python Version 2.2!
Beispiel:

Code: Alles auswählen

>>> to_Dict = lambda t: dict(map(None, map(lambda x: str(x), xrange(len(t))), t))
>>> to_Dict((1,2,3,4,5))
{'1': 2, '0': 1, '3': 4, '2': 3, '4': 5}
>>>

Kann zum Beispiel verwendet werden um bestimmte Elemente einer Liste in einen String zu übertragen.
Noch ein Beispiel:

Code: Alles auswählen

>>> import time
>>> to_Dict = lambda t: dict(map(None, map(lambda x: str(x), xrange(len(t))), t))
>>> print "Time = %(3)02d:%(4)02d:%(5)02d" % to_Dict(time.localtime())
Time = 13:52:53
>>>

Ich weiß schon, daß es für die Darstellung von Daum und Uhrzeit als Strings schon interne Funktionen gibt, es ist ja nur ein Beispiel.

Gruß

Dookie
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Samstag 22. Februar 2003, 14:23

hmm... nen bissl kompliziert und meiner meinung nach überflüssig, weil man doch auf elemente mit liste[elementnummer] genauso zugreifen kann, wie mit deiner Funktion. (ich steig nicht ganz durch deinen Code durch :oops: )

auch verstehe ich nicht, warum du zweimal map nimmst.

Code: Alles auswählen

to_Dict = lambda t: dict(map(None, map(lambda x: str(x), xrange(len(t))), t))

Man könnte doch auch das nehmen, oder ? :?:

Code: Alles auswählen

to_Dict = lambda t: dict(map(lambda x,y: (str(x),y), xrange(len(t)),t))
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Samstag 22. Februar 2003, 18:24

Hallo Milan,

na so ganz überflüssig ists wohl nicht. Du hast z.B. eine Tupel ("eins", "zwei", "drei") und willst diese Elemente in einem String aber in geänderter Reihenfolge ausgeben.

Code: Alles auswählen

>>> a = ("eins", "zwei", "drei")
>>> print "%s kommt vor %s, und am Ende kommt %s" % a
eins kommt vor zwei, und am Ende kommt drei
>>> print "%s kommt am schluß, %s in der Mitte undd am Anfang kommt %s" % (a[2],a[1],a[0])
drei kommt am schluß, zwei in der Mitte undd am Anfang kommt eins
>>>

Bei nur 3 Einträgen geht das ja noch, aber wenns mehr werden oder das öfter in einer Anwendung gebraucht wird, ist die Lösung mit der Umwandlung in ein Dictionary sicher eleganter.

Code: Alles auswählen

>>> print "%(2)s kommt vor %(1)s, und am Ende kommt %(0)s" % a
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: format requires a mapping
>>>

geht ja leider nicht.
Warum ich da zweimal map verwende, kommt daher, daß ich den Code einzeln getestet und dann zusammengepfriemelt habe. Deine Version ist noch kompakter :)


Gruß

Dookie
Olliminatore

Beitragvon Olliminatore » Montag 30. Mai 2005, 16:00

ab Python 2.3

dict(enumerate(Liste))

geht auch oder?
Gast

Beitragvon Gast » Montag 30. Mai 2005, 16:46

nö, jedenfalls nicht für die obige Anwendung mit den Strings, da dann im Dict als Key eine Zahl steht, jedoch ein String gesucht wird. So gehts:

Code: Alles auswählen

dict((str(i),item) for (i,item) in enumerate(Liste))
#in 2.3: dict([(str(i),item) for (i,item) in enumerate(Liste)])


Edit (Leonidas): Code in Python-Tags gesetzt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder