2016-05-19 7 views
1

Meine Eingabeliste des folgenden Typs ist (Beachten Sie, dass es leere Strings enthält):Ist es möglich, eine Wörterbuchliste aus einer Liste von String-Daten zu erstellen?

Input = ['NO', 'Part Number', '1', '12334', '2', '45fd33', ''] 

Ich brauche eine Liste der Wörterbücher wie

[ 
    {'NO': '1', 'Part Number': '12334'}, 
    {'NO': '2', 'Part Number': '45fd33'} 
] 

(Wo die leere Zeichenfolgen ignoriert werden) erstellen Was ich bisher versucht:

dict(enumerate(new_name_list, start=1)) 

und bekam folgende Ausgabe:

{1: 'NO', 2: 'Part Number', 3: '1', 4: '12334', 5: '2', 6: '45fd33', 7: ''} 

Wie kann ich die erwartete Ausgabe erhalten und leeren String-Wert aus der Liste ausschließen?

+0

Warum erhalten Sie die Daten in dieser Struktur anstelle einer Sequenz von 2-Sequenzen? –

+1

Gerade jetzt ist Ihre erwartete Ausgabe eine Reihe von .. Nun, ich bin mir nicht sicher, es ist auf halbem Weg zwischen einer Liste und einem Wörterbuch. Ich denke, was Sie wollen, ist eine Liste von Wörterbüchern. – DSM

+0

Warum sind Ihre Schlüssel in derselben Liste als Ihre Werte? Es ist möglich, 3, 4 Tasten anstelle von 2 zu haben? Eine Liste der Schlüssel, die von den Werten getrennt sind, könnte besser sein (außer wenn Sie immer mit 2 Schlüsseln arbeiten müssen). –

Antwort

2

Es gibt zwei separate Fragen, die Sie hier stellen.

Um '' aus der Liste entfernen Sie es durch ein list comprehension

>>> Input = ['NO', 'Part Number', '1', '12334', '2', '45fd33',''] 
>>> Input_Changed = [i for i in Input if i!=''] 
>>> Input_Changed 
['NO', 'Part Number', '1', '12334', '2', '45fd33'] 

die Syntax der Zeichenfolge folgt der allgemeinen Regel, dass die ungeraden Elemente entblößt die ersten beiden NO und die geraden soll passieren kann sein sollen Part_Number sein.

dieses Denn wir nach dem iter Trick verwenden:

>>> i = iter(Input_Changed[2:]) 
>>> [{Input_Changed[0]:x,Input_Changed[1]:y} for x,y in zip(i,i)] 
[{'Part Number': '12334', 'NO': '1'}, {'Part Number': '45fd33', 'NO': '2'}] 

Die Hauptidee ist, dass iter einen Iterator zurückgibt und somit jedes Mal, wenn Sie ein Element übergeben Sie ein Element verbrauchen. Daher erhalten Sie die erforderliche Ausgabe, wenn Sie zip (die benachbarte Elemente zurückgibt, da Sie den gleichen Iterator wie beide Argumente übergeben).

+0

Was ist der Unterschied zwischen "trick" und "zip (Input_Changed [2 :: 2], Input_Changed [3 :: 2])"? –

+1

@ Two-BitAlchemist Einfacher Iterator mit dem "Trick". Wenn Sie einen Slice erstellen, erstellen Sie zwei neue Listen. –

Verwandte Themen