2017-12-19 1 views
0

Ich arbeite mit einer großen CSV-Datei, in der jede Zeile das Datum und zwei Werte enthält. Ich versuche, ein Wörterbuch mit dem Datum als Schlüssel für die beiden Werte einzurichten. Ich muss dann die zwei Werte jeder Taste multiplizieren und die Antwort aufzeichnen. Ich habe 3000 Zeilen in der Datei.Python: Entferne den Wert aus dem Wörterbuch und multipliziere die restlichen zwei.

Probe: Sample CSV File

Bisher habe ich das als Schlüssel jedoch festgelegten Zeitpunkt für jedes Wertepaar auch es ist das Datum als ein dritter Wert für jeden Schlüsselsatz Wiederverwendung, ist es eine Möglichkeit, diese zu entfernen?

Sobald ich das entfernt habe, gibt es eine Möglichkeit, die Werte in jedem Schlüsselsatz zu multiplizieren? so weit

Dies ist mein Code:

main_file = "newnoblanks.csv" 
import csv 
import collections 
import pprint 

with open(main_file) as fp: 
    root = csv.reader(fp, delimiter=',') 
    result = collections.defaultdict(list) 
    for row in root: 
     date = row[0].split(",")[0] 
     result[date].append(row) 

print ("Result:-") 
pprint.pprint(result) 

Das ist mein Ausgang:

Output

+0

Vielleicht Sie wollen: 'Ergebnis [Datum] .append (Liste (Karte (float, Zeile [1:])))' –

Antwort

1

Ich glaube nicht, dass Sie auch eine defaultdict hier verwenden müssen, weisen Sie einfach die ganze Zeile (abzüglich des Datums) auf die Taste des Diktats. Sie sollten nur in der Lage sein

with open(main_file) as fp: 
    root = csv.reader(fp, delimiter=',') 
    result = dict() 
    for row in root: 
     date = row[0].split(",")[0] 
     result[date] = row[1:] 

zu tun Wenn Sie das Produkt der beiden Werte erhalten möchten, können Sie so etwas wie

for key in result: 
    result[key] = reduce(lambda x, y: x*y, result[key]) 
+0

Das funktionierte perfekt, danke! –

1

tun konnte, ich weiß, das beantwortet wurde, aber das Gefühl, es eine ist Alternative eine Überlegung wert:

import csv 
from pprint import pprint 
with open('newnoblanks.csv') as fp: 
    root = csv.reader(fp) 
    result = dict((date, float(a) * float(b)) for date, a, b in root) 
    pprint(result) 

mit den folgenden Daten-Datei:

19/08/2004,49.8458,44994500 
20/08/2004,53.80505,23005800 
23/08/2004,54.34653,18393200 

Die Ausgabe lautet:

{'19/08/2004': 2242786848.1, 
'20/08/2004': 1237828219.29, 
'23/08/2004': 999606595.5960001} 
Verwandte Themen