2016-12-11 13 views
1

Ich bin ganz neu in Python, und haben eine Liste wie folgt aus:Typ-Cast `float` zu` str` ohne Präzision zu verlieren

[{u'value': 0, u'time': u'12:39:00'}, 
{u'value': 0.019179999828338623, u'time': u'12:40:00'}, 
{u'value': 0, u'time': u'12:41:00'}, 
{u'value': 0, u'time': u'12:42:00'}, 
{u'value': 0, u'time': u'12:43:00'}, 
{u'value': 0, u'time': u'12:44:00'}, 
{u'value': 0, u'time': u'12:45:00'}, 
{u'value': 0, u'time': u'12:46:00'}, 
{u'value': 0.01713000051677227, u'time': u'12:47:00'}, 
{u'value': 0.023979999125003815, u'time': u'12:48:00'}] 

gebe ich diese Liste auf eine andere Funktion, die angeblich Formatieren Sie es auf eine bestimmte Weise (entfernen Sie alle Elemente, deren Wert 0 ist, und fügen Sie dem Zeitelement ein Datum hinzu). Als Beispiel versuche ich die folgende „gereinigt Liste“ zu erreichen:

[{'count': '0.019179999828338623', 'datetime': '2016-12-11 12:40:00'}, ...] 

Das Problem, das ich bin vor, dass, wenn ich über alle Elemente in der Liste iterieren, Python scheint den Wert auf 15 Zeichen werden abgeschnitten , so schaltet sich die oben erwiesen:

[{'count': '0.0191799998283', 'datetime': '2016-12-11 12:40:00'}, ...] 

Mein Code zu „clean“ wird die Liste wie folgt

for my_data in my_list: 
    if my_data['value']: 
      my_record = {"count": str(my_data['value']), "datetime": '%s %s' % (the_date, my_data['time'])} 
      final_result.append(my_record) 

I Druck my_list aus dieser Funktion versucht haben - die Daten korrekt ist (ohne die Kürzung). Aber wenn ich das aktuelle Element aus der Schleife (print(my_data['value'])) drucke, erhalte ich den 15-stelligen abgeschnittenen Wert.

Jede Hilfe wird geschätzt!

+0

@Kundor: Vielen Dank für mich Korrektur –

Antwort

4

Anstatt es auf str zu typen, verwenden Sie stattdessen repr. Sie erhalten den Wert als String ohne Genauigkeit zu verlieren. Zum Beispiel:

>>> repr(0.019179999828338623) 
'0.019179999828338623' 

Daher sollten Sie den Code wie:

for my_data in my_list: 
    if my_data['value']: 
     final_result.append({ 
      "count": repr(my_data['value']), # Using `repr` here 
      "datetime": '%s %s' % (the_date, my_data['time']) 
     }) 
Verwandte Themen