2017-06-15 76 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'] 

我可以得到相同的結果,但使用列表生成器嗎? 我試着這樣說:通過詞典在詞典中進行一行迭代

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

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

回答

4

只是連鎖使用itertools.chain.from_iterable的字典中的值(也稱爲鍵),並轉換成列表,打印結果:

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) 

結果:

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

請注意,由於您在字典鍵上進行迭代,因此無法保證順序。

變,而無需使用itertools與扁平化的內部理解雙循環(這可能是更接近你的嘗試):

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

太棒了!謝謝 –