Str to Float in einer Liste

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.
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

Str to Float in einer Liste

Beitragvon koukoun » Mittwoch 2. Mai 2007, 13:05

Hallo,
naechstes Problem waere dann:


dict_a={"var_1":["0","22", "11",...,],... "var_n":["212", "122"...]}

wie kann ich die die Elemente (in Form von Zahlen) in den Values von "str" zur "Float" wandeln?

Ich bin dankbar fuer jede Unterstuetzung.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Mittwoch 2. Mai 2007, 13:16

Eine Möglichkeit währe folgende:

Code: Alles auswählen

dict_a={"var_1":["0","22", "11"], "var_n":["212", "122"]}

new_dict = {}

for key in dict_a:
    new_dict[key] = [float(i) for i in dict_a[key]]

print new_dict



ALso ein neues Dictionary anfertigen, welches dann die in float umgewandelten Werte bekommt. (mit Hilfe der Funktion 'float' wandelt man entsprechende strings in float zahlen um. klappt auch mit 'int')
Aber Vorsicht:

Code: Alles auswählen

>>> float("4.3")
4.2999999999999998
>>> float("4,2")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): 4,2


MFG EnTeQuAk

€dit:
warum den Namespace unnötig belasten *g*::

Code: Alles auswählen

dict_a={"var_1":["0","22", "11"], "var_n":["212", "122"]}

for key in dict_a:
    dict_a[key] = [float(i) for i in dict_a[key]]

print dict_a
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

Beitragvon koukoun » Mittwoch 2. Mai 2007, 13:24

Danke EnTeQuAk.

kannst du mir ein Buch empfehlen?! Ich will unbedingt tiefer in diese Sprache gehen, da meine Diplomarbeit auf Python basiert .

Mein Problem ist, ich habe in der Hand nur einen kleinen Schulungskript und das kann gleich ins Muell schmeissen.
joost
gelöscht
Beiträge: 134
Registriert: Sonntag 29. April 2007, 13:28

Beitragvon joost » Mittwoch 2. Mai 2007, 13:33

Bin nicht gefragt, aber: Die Online-Doku ist wahrscheinlich schwer zu toppen. Empfehlung: Kapitel 1-9 aus dem Tutorial einmal gründlich durchlesen - das ist gar nicht so viel (am besten vielleicht einen Ausdruck). Dann für alle aktuellen Fragen die Library-Referenz benutzen.

Habe hisher nur eine einzige Lücke gefunden: Exceptions haben eine eigene Syntax, die irgendwie auch in die Exception-Klasse eingebaut ist. Dafür ist nur der grobe Gebrauch dokumentiert. Alles andere ist bestens und für Programmiertechnick ganz allgemein sehr lehrreich beschrieben - GvR ist halt ein Genie.
___________________
Schlechte Software ist schlimmer als keine Software
EyDu
User
Beiträge: 4868
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Mittwoch 2. Mai 2007, 13:33

EnTeQuAk hat geschrieben:€dit:
warum den Namespace unnötig belasten *g*::

Code: Alles auswählen

dict_a={"var_1":["0","22", "11"], "var_n":["212", "122"]}

for key in dict_a:
    dict_a[key] = [float(i) for i in dict_a[key]]

print dict_a


Oder gar Funktionen verwenden die für so etwas vorgesehen sind :D

Code: Alles auswählen

dict_a={"var_1":["0","22", "11"], "var_n":["212", "122"]}

for key, value in dict_a.iteritems():
    dict_a[key] = map(float, value)

print dict_a


Es gibt natülrich auch Lösungen, die man besser hinter einem EDIT versteckt ;-) :

Code: Alles auswählen

d={"var_1":["0","22", "11"], "var_n":["212", "122"]}
dict(map(lambda x: (x, map(float, d[x])), d))
Zuletzt geändert von EyDu am Mittwoch 2. Mai 2007, 21:00, insgesamt 1-mal geändert.
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

Beitragvon koukoun » Mittwoch 2. Mai 2007, 13:48

wenn ich die Werte in diesem Form habe : 112.0003 oder 0.999999

weisst du wie diese Zahlen runden kann? 112.0003>112 0.99999>1
EyDu
User
Beiträge: 4868
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Mittwoch 2. Mai 2007, 13:53

koukoun hat geschrieben:wenn ich die Werte in diesem Form habe : 112.0003 oder 0.999999
weisst du wie diese Zahlen runden kann? 112.0003>112 0.99999>1


Du hast aber schon mal programmiert und kannst selbständig in der Doku nachlesen? Oder hast du vor dich durch deine Diplomarbeit zu raten ;-) ?

Code: Alles auswählen

a = round(0.6)
#Um Integers zu erhalten:
a = int(round(0.6))
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Mittwoch 2. Mai 2007, 13:54

@EyDu:
wär ja zu einfach gewesen *g*

@koukoun:

Also ich kann dir A Byte of Python empfehlen. Ist kostenlos, online lesbar, ausdruckbar und sehr gut.

Ansonsten habe ich hier noch so nen kleines Python Taschenbuch (kA, wie das heißt... bin grad auf Arbeit) und "Objektorientierte Programierung mit Python" rumstehen. Ersteres habe ich glaub ich ein, zwei mal benutzt... dafür gibts ja ansonsten wirklich Python-Docs. letzteres ist ansich zu empfehlen. Auch, wenn die Beispiele (meine Meinung) nicht immer die besten sind.


MfG EnTeQuAk
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Mittwoch 2. Mai 2007, 13:54

Ueberleg dir mal, was runden auf Englisch heisst... Die Suchmaske auf der Python-Dokumentationsseite ist uebrigens seeehr nuetzlich:
http://docs.python.org/

EDIT: Mist, jetzt haben es andere verraten... :wink:
EyDu
User
Beiträge: 4868
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Mittwoch 2. Mai 2007, 14:09

Rebecca hat geschrieben:EDIT: Mist, jetzt haben es andere verraten... :wink:


Ok, ich werde dann demnächst meine Posts mit dir per PM abstimmen :D
htw7448
User
Beiträge: 51
Registriert: Montag 16. April 2007, 10:59
Wohnort: Messel(Hessen)
Kontaktdaten:

Beitragvon htw7448 » Mittwoch 2. Mai 2007, 15:41

Ich habe mich gerade gefragt ob das Konvertieren der Listeneinträge im ´´dict´´ nicht auch über ein dictionary-display möglich ist!?

Prinzipiell sollte das doch ähnlich wie bei den Listendisplays gehen?
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Mittwoch 2. Mai 2007, 16:19

Es gibt kein Dictionary-Display.

Es gibt nur List Comprehensions, Generator Expressions und ab Python 3.0 Set Comprehensions.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 2. Mai 2007, 18:40

htw7448 hat geschrieben:Ich habe mich gerade gefragt ob das Konvertieren der Listeneinträge im ´´dict´´ nicht auch über ein dictionary-display möglich ist!?

Meinst du bei der Anzeige? Dictionary-Display sagt mir nämlich auch gar nichts.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
htw7448
User
Beiträge: 51
Registriert: Montag 16. April 2007, 10:59
Wohnort: Messel(Hessen)
Kontaktdaten:

Beitragvon htw7448 » Mittwoch 2. Mai 2007, 20:25

Hab da wohl was falsch verstanden. In einem Buch war von Dictionary Display die Rede. In etwa der Form

Code: Alles auswählen

dict_display ::= "{" [key_datum_list] "}"
key_datum_list ::= key datum ("," key_datum)* [","]
key_datum ::= expression ":" expression


Rein theoretische Definition wahrscheinlich :)
Zuletzt geändert von htw7448 am Mittwoch 2. Mai 2007, 20:50, insgesamt 1-mal geändert.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 2. Mai 2007, 20:31

htw7448 hat geschrieben:dict ::= "{"[a]"}"
a::= "," usw

Du bist sicher, dass das Buch von Python handelte? Denn der Code den du da schreibst ist kein gültiger Python-Code. Das erinnert mich eher an EBNF.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder