2015-06-01 83 views
2

我希望把这个单列表解析解包嵌套字典

a = {'a': {'b': 'b aw', 'c': 'c aw'}, 'b': {'b': 'b2 aw', 'c': 'c2 aw'}, 'c': {}} 

这个

['b aw', 'c aw', 'b2 aw', 'c2 aw'] 

与列表理解。我想我需要一些方法来使这个表达式“法律”:

a2 = [a1 for a1 in a.values().values()] 

我不想做dict(a.values),因为这只会让我回到我原来的字典,。我知道有很多方法可以用for循环来做到这一点,但是有没有办法在没有for循环的情况下做到这一点?谢谢。

回答

2

你需要循环在你的字典的值的值:

>>> [i for j in a.values() for i in j.values()] 
['c aw', 'b aw', 'c2 aw', 'b2 aw'] 
1

的方式,使原来的values表达

​​

法律,就像这样:

import itertools 

itertools.chain.from_iterable([v.values() for v in a.values()]) 

说明:内部列表是列表的列表 - 对应于eac的值h的价值。 itertools.chain.from_iterable展平它。

+0

感谢这个建议。我需要更熟悉itertools。 – sunny

0

你可以这样做:

a = {'a': {'b': 'b aw', 'c': 'c aw'}, 'b': {'b': 'b2 aw', 'c': 'c2 aw'}, 'c': {}}  
a2 = [a1 for a1 in a.values()] 
a3 = [a3.values() for a3 in a2] 
a3.sort()