2017-06-15 80 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

太棒了!谢谢 –