2017-02-08 3 views
0

Ich habe ein Array von Listen, die ich in ein Wörterbuch, in dem das erste Element in jeder Liste ein Schlüssel ist und die restlichen Elemente Werte, die diesem Schlüssel entsprechen müssen.Konvertieren verschachtelte Liste von Listen in ein Wörterbuch

Zum Beispiel des Array:

a=[[[1, 2, 4] [2, 1, 3, 5] [3, 2, 6]] 
    [[4, 1, 5, 7] [5, 2, 4, 6, 8] [6, 3, 5, 9]]] 

soll wie folgt aussehen:

dict = {1:[2,4], 2:[1,3,5], 3:[2,6], 4:[1,5,7], 5:[2,4,6,8], 6:[3,5,9]} 

Während das Objekt wie eine Liste von Listen aussieht, es ist eigentlich ein Array von diesem Prozess erstellt:

a = [[i] for i in range(1, 10)] 
    swap = a[0] 
    a[0] = None 
    b = np.array(a) 
    b[0] = swap 
    b.shape = 3, 3 

Dann habe ich durch das Array und angehängte Zahlen zu den verschiedenen Listenelementen, die w ist Die Listen haben sich erweitert. Lass es mich wissen, wenn das nicht klar ist!

Gibt es eine einfache Möglichkeit, ein Array durchzulaufen und dieses zu erstellen? Vielen Dank!

+0

@ kawadhiya21 Wie geht es Ihnen so sicher? _Technisch_ das ist eine Liste von Listen. Technisch ist es kein Array von irgendetwas. –

+0

Führen Sie die betreffende Anweisung aus. Es wird eine Ausnahme ausgelöst. – kawadhiya21

+0

Ja, du hast recht, dem OP fehlt ein Komma. Ich werde es korrigieren. –

Antwort

4

können Sie verschachtelte dict verwenden Verständnis mit extended iterable unpacking:

>>> l = [[[1, 2, 4], [2, 1, 3, 5], [3, 2, 6]], [[4, 1, 5, 7], [5, 2, 4, 6, 8], [6, 3, 5, 9]]] 
>>> {k: v for sub_l in l for k, *v in sub_l} 
{1: [2, 4], 2: [1, 3, 5], 3: [2, 6], 4: [1, 5, 7], 5: [2, 4, 6, 8], 6: [3, 5, 9]} 
+0

Dies ist eine großartige Lösung! Hier auf stackoverflow gibt es immer etwas zu lernen. Danke @niemmi –

0

Generator Mit Hilfe der Liste zu glätten,

a=[ 
    [[1, 2, 4], [2, 1, 3, 5], [3, 2, 6], ], 
    [[4, 1, 5, 7], [5, 2, 4, 6, 8], [6, 3, 5, 9]], 

    ] 

def flat(a): 
    for level1 in a: 
     for level2 in level1: 
      yield level2 

result = {} 
for l in flat(a): 
    result[l[0]] = l[1:] 

print result 
0

Hier ist eine andere Lösung basiert auf @niemmi Antwort mit itertools.chain() vielleicht besser lesbar:

>>> import itertools 
>>> l = [[[1, 2, 4], [2, 1, 3, 5], [3, 2, 6]], [[4, 1, 5, 7], [5, 2, 4, 6, 8], [6, 3, 5, 9]]] 
>>> {k: v for k, *v in itertools.chain.from_iterable(l)} 
{1: [2, 4], 2: [1, 3, 5], 3: [2, 6], 4: [1, 5, 7], 5: [2, 4, 6, 8], 6: [3, 5, 9]} 

Jetzt haben wir nur eine for loop von flatten die l Liste.

Verwandte Themen