2017-06-15 6 views
1
G2 = {'a': {'c': 1, 'b': 1}, 'b': {'a': 1, 'c': 1}} 

b = G2.values() 

for i in b: 
    for key, value in i.items(): 
     list.append(key) 

#result: ['c', 'b', 'a', 'c'] 

Kann ich das gleiche Ergebnis erhalten, aber einen Listengenerator verwenden? Ich habe versucht, es wie folgt aus:Eine Zeile Iteration durch Wörterbücher in Wörterbüchern

list2 = [key for key, value in i.items() for i in b] 

#but i get: ['a', 'a', 'c', 'c'] 

Antwort

4

nur die Wörterbuchwerte Kette (aka Tasten) mit itertools.chain.from_iterable und konvertieren zur Liste um das Ergebnis zu drucken:

import itertools 

G2 = {'a': {'c': 1, 'b': 1}, 'b': {'a': 1, 'c': 1}} 

#['c', 'b', 'a', 'c'] 

result = list(itertools.chain.from_iterable(G2.values())) 

print(result) 

Ergebnis:

['c', 'b', 'c', 'a'] 

Beachten Sie, dass die Reihenfolge nicht garantiert wird, da Sie Wörterbücher im Wörterbuch durchlaufen.

Variante ohne itertools mit Abflachung Doppel-Loop innerhalb Verständnis mit (was wahrscheinlich näher an Ihrem Versuch ist):

result = [x for values in G2.values() for x in values] 
+0

great! Danke –

Verwandte Themen