Seite 1 von 1

Str to Float in einer Liste

Verfasst: Mittwoch 2. Mai 2007, 13:05
von koukoun
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.

Verfasst: Mittwoch 2. Mai 2007, 13:16
von EnTeQuAk
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

Verfasst: Mittwoch 2. Mai 2007, 13:24
von koukoun
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.

Verfasst: Mittwoch 2. Mai 2007, 13:33
von joost
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

Verfasst: Mittwoch 2. Mai 2007, 13:33
von EyDu
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))

Verfasst: Mittwoch 2. Mai 2007, 13:48
von koukoun
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

Verfasst: Mittwoch 2. Mai 2007, 13:53
von EyDu
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))

Verfasst: Mittwoch 2. Mai 2007, 13:54
von EnTeQuAk
@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

Verfasst: Mittwoch 2. Mai 2007, 13:54
von Rebecca
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:

Verfasst: Mittwoch 2. Mai 2007, 14:09
von EyDu
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

Verfasst: Mittwoch 2. Mai 2007, 15:41
von htw7448
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?

Verfasst: Mittwoch 2. Mai 2007, 16:19
von birkenfeld
Es gibt kein Dictionary-Display.

Es gibt nur List Comprehensions, Generator Expressions und ab Python 3.0 Set Comprehensions.

Verfasst: Mittwoch 2. Mai 2007, 18:40
von Leonidas
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.

Verfasst: Mittwoch 2. Mai 2007, 20:25
von htw7448
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 :)

Verfasst: Mittwoch 2. Mai 2007, 20:31
von Leonidas
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.

Verfasst: Mittwoch 2. Mai 2007, 20:51
von htw7448
Dieser Part taucht auch in einer etwas älteren offiziellen Python Doku auf.

http://mail.python.org/pipermail/python ... 10114.html

Verfasst: Mittwoch 2. Mai 2007, 21:12
von Leonidas
htw7448 hat geschrieben:Dieser Part taucht auch in einer etwas älteren offiziellen Python Doku auf.
Ja, das ist die EBNF-Notation der Syntax. Das ist kein Python und Dictionary Display sagt wohl nur aus, wie so die Syntax von einem Dictionary aussieht. Mehr nicht. Das ist kein Feature der Sprache.