2016-07-14 16 views
0

Ich habe Probleme, ein Wörterbuch aus einer Liste und einer Liste von Listen zu erstellen. Hier ein Beispiel:Erstellen Sie ein Wörterbuch aus einer zweidimensionalen Liste in Python

a = ['a','b','c','d'] 
b = [[1,2,0], [3,4,1], [5,6,0], [7,8,1]] 

ich eine Ausgabe möchten die Elemente der Liste ein und das dritte Element der Liste mit b, wie dieser Ausgabe:

a = {'a': 0, 'b': 1, 'c': 0, 'd': 1] 

Beide Listen haben die gleiche Länge, also versuchte ich etwas wie:

c = dict(zip(a,b)) 

Aber in diesem Fall kann ich das dritte Element von b nicht auswählen.

In meinem realen Fall habe ich Millionen von Daten, so brauche ich eine schnelle und einfache Möglichkeit, es zu tun, und erstellen Sie eine temporäre Liste von b möglicherweise nicht eine optimale Lösung.

Dank

Antwort

2

Sie könnten tun:

dict(zip(a, (x[-1] for x in b))) # Maybe x[2] if some of the sublists have more than 3 elements. 

Wenn Sie auf Python2.x sind, könnten Sie itertools.izip oder future_builtins.zip

0

ich dieses versucht habe verwenden wollen, und es schien haben gearbeitet:

>>> a = ['a','b','c','d'] 
>>> b = [[1,2,0], [3,4,1], [5,6,0], [7,8,1]] 
>>> c = dict(zip(a, [d[2] for d in b])) 
>>> c 
{'a': 0, 'c': 0, 'b': 1, 'd': 1} 
1

Oder mit einem Wörterbuch in comp rehension:

a = ['a','b','c','d'] 
b = [[1,2,0], [3,4,1], [5,6,0], [7,8,1]] 

c = {k: v[-1] for k, v in zip(a, b)} 

See PEP274 Dict Comprehensions

0

Sie Gebrauch von itemgetter innerhalb des operator Modul machen. Wobei den Index innerhalb der b Unterlisten darstellt.

from operator import itemgetter 
a = ['a','b','c','d'] 
b = [[1,2,0], [3,4,1], [5,6,0], [7,8,1]] 

c = dict(zip(a, map(itemgetter(2), b))) 

und da Sie viele Elemente haben, vielleicht itertools wird mit dem Gedächtnis helfen:

from operator import itemgetter 
from itertools import izip, imap 

a = ['a','b','c','d'] 
b = [[1,2,0], [3,4,1], [5,6,0], [7,8,1]] 

c = dict(izip(a, imap(itemgetter(2), b))) 

Diese Lösungen werden helfen, die Vorteile der zugrunde liegenden C-Module für Leistungsvorteile zu nehmen.

Verwandte Themen