2016-07-21 4 views
0

Ich habe ein Wörterbuch Ich möchte in eine Liste mit Listen zu machen, so dass ich in eine CSV schreiben kann, aber was auch immer ich tue, es funktioniert nicht.Wörterbuch Liste mit Listen innerhalb und drucken nach csv

I sortiert verwendet (dllist.items()) zu sortieren, sie als

[(key1, value1), (key2, value2), ... ,(keyN, valueN)] 

Das ist, was ich habe,

dict = [('aaa', [5787, 40, 1161, 1222]), 
('aab', [6103, 69, 810, 907]), 
('aac', [3081, 41, 559, 638]), 
('aae', [1011000, 191, 411, 430])] 

Ich will es

list = [(aaa, 5787, 40, 1161, 1222), 
('aab',6103, 69, 810, 907), 
('aac', 3081, 41, 559, 638), 
('aae', 1011000, 191, 411, 430)] 

sein Was mache ich falsch? und wie mache ich es am einfachsten, es in einem CSV als eine Zeile für jedes Element zu speichern?

+0

Können Sie teilen das Wörterbuch, mit dem du beginnst? Sieht es etwa so aus? {'Aaa': [5787, 40, 1161, 1222], 'aab': [6103, 69, 810, 907], ...} '? – smarx

Antwort

0

Aufgrund meiner Annahme über das, was Ihr Wörterbuch aussieht, das die Konvertierung tun sollten Sie die Ausgabe in eine CSV-Datei und schreiben wollen:

import csv 

d = { 'aaa': [5787, 40, 1161, 1222], 'aab': [6103, 69, 810, 907] } 
rows = [[k] + v for k, v in sorted(d.items())] 

with open("out.csv", "w") as out: 
    writer = csv.writer(out) 
    for row in rows: 
     writer.writerow(row) 

# out.csv: 
# aaa,5787,40,1161,1222 
# aab,6103,69,810,907 
+0

Vielen Dank @smarx, ja deine Annahme war richtig, und sorry, dass ich keine genaueren Details angegeben habe .. aber es hat funktioniert –

+0

Aber muss ich nicht "schließen", nachdem ich den "writer.writerow" benutze? –

+0

@NutshellProgrammer Nr. Die Datei selbst ist die einzige Sache, die geschlossen werden muss, und zwar durch den Kontextmanager ('mit ...'). – smarx

0

die Ausgabe von sorted gegeben, das tut es:

>>> my_dict = [('aaa', [5787, 40, 1161, 1222]), ('aab', [6103, 69, 810, 907]), ('aac', [3081, 41, 559, 638]), ('aae', [1011000, 191, 411, 430])] 
>>> my_list = [tuple([i[0]] + i[1]) for i in my_dict] 
>>> 
>>> my_list 
[('aaa', 5787, 40, 1161, 1222), ('aab', 6103, 69, 810, 907), ('aac', 3081, 41, 559, 638), ('aae', 1011000, 191, 411, 430)] 

I my_list und my_dict anstelle von list und dict jeweils verwendet haben Shadowing die eingebauten Namen zu vermeiden.

Der Code, der Trick:

[tuple([i[0]] + i[1]) for i in my_dict] 
#  |<- put first item in a list 
#    |<- join with second item 

setzt die in einer Liste in jedem tuple ersten Punkt und verkettet mit dem zweiten Element in dem Tupel, die bereits eine Liste ist. Die Operation wird für alle Tupel in einem Listenverständnis wiederholt.


ein Objekt csvwriter Da können Sie dann verwenden:

writer.writerows(my_list) 

alle Artikel in Ihre csv bei einem Go Datei zu schreiben.

0

Sie können Tupel hinzufügen (die sie aneinander hängen) und Sie können Listen in Tupel konvertieren. Also, die folgenden Werke für mich:

>>> x = [('a', [1,2,3]), ('b', [4,5,6])] 
>>> x 
[('a', [1, 2, 3]), ('b', [4, 5, 6])] 
>>> y = [(i,) + tuple(j) for i, j in x] 
>>> y 
[('a', 1, 2, 3), ('b', 4, 5, 6)]