2016-08-08 7 views
1

Ich habe eine einfache CSV-Datei:eine dict Liste als Zeilen in CSV Schreiben

101,8 
102,10 
102,6 
103,5 
104,0 

mit doppelten Einträgen für row [0] auf der zweiten und dritten Zeile und ich die letzte (oder untere Reihe halten wollen [1] Wert) duplizieren. Der einzige Weg, wie ich herausfinden konnte, wie es funktioniert, war die Verwendung von dict() zum Sortieren, aber jetzt habe ich Probleme beim Schreiben in eine CSV-Datei mit dem richtigen Format. Mein Code:

from operator import itemgetter 
from pprint import pprint 
import csv 

with open('cards1.csv', 'rb') as csvfile: 
    reader = csv.reader(csvfile, delimiter=',') 
    with open('cards2.csv', 'wb') as csvfile1: 
     writer = csv.writer(csvfile1, delimiter=',') 
     rows = iter(reader) 
     sort_key = itemgetter(0) 
     sorted_rows = sorted(rows, key=sort_key) 
     unique_rows = dict((row[0], row) for row in sorted_rows) 
     pprint (unique_rows) 
     writer.writerows(unique_rows) 

die druckt:

{'101': ['101', '8'], 
'102': ['102', '6'], 
'103': ['103', '5'], 
'104': ['104', '0']} 

aber schreibt meine Dateien wie:

1,0,2 
1,0,3 
1,0,1 
1,0,4 

wo, wie ich es einfach möchte das Duplikat in Reihe entfernen [0] mit dem größten Wert in Zeile [1]. Danke (übrigens, die Reihenfolge der erstellten csv ist nicht kritisch)

+0

'writer.writerows (unique_rows.values ​​())' - vorausgesetzt, die Reihenfolge, in der die Zeilen gedruckt out ist egal. – SuperSaiyan

+0

Ich bin verwirrt über das, was Sie wollen, die Ergebnisse zu sein. Du sagst, du willst "den größten Wert in' row [1] '" - ich sehe nur einen einzelnen Wert in 'row [1]'. Von Ihrem ersten csv-Dateibeispiel erwarten Sie nur die Werte von 8, 10, 6, 5, 0? –

Antwort

0

Wenn ich richtig verstehe.

Statt:

writer.writerows(unique_rows) 

Sie wollen, wie etwas zu tun ist:

for row in unqiue_rows.values(): 
    writer.writerow(row) 
+2

... oder einfach '.writers (unique_rows.values ​​()' – SuperSaiyan

+0

Das war es! Ich hatte die "values ​​()" weggelassen, als ich diese Aussage früher ausprobiert hatte. Danke, sie sortieren zu lassen ist keine große Sache ATM , aber da ich diese Sprache noch lerne, werde ich als nächstes an dieser Lösung arbeiten, ich habe versucht, diese Lösung mit 'sort()' zu lösen, bin aber auf Probleme gestoßen. – Jason

Verwandte Themen