2015-12-20 54 views
1

我有以下字典結構:如何扁平化「複雜」字典到列表

{'AA': [('No Av', 'Ave', 3.35, 'Max', 0.9, 'Min', -6.8), ('analist disp:', -5.0), u' AA: Jan 11, 2016\t\t\t']} 

其中

u' AA: Jan 11, 2016\t\t\t' 

只是一個unicode字符串。

我願意把它壓扁成像這樣的列表:

['AA', 'No Av', 'Ave', 3.35, 'Max', 0.9, 'Min', -6.8, 'analist disp:', -5.0, u' AA: Jan 11, 2016\t\t\t'] 

我已經嘗試了這麼多的選擇,並沒有什麼作品出來。

回答

0

定義是遞歸的字典值的遞歸函數:

d = {'AA': [('No Av', 'Ave', 3.35, 'Max', 0.9, 'Min', -6.8), 
      ('analist disp:', -5.0), u' AA: Jan 11, 2016\t\t\t']} 


def flat(xs): 
    for x in xs: 
     if isinstance(x, (list, tuple)): 
      for y in flat(x): 
       yield y 
     else: 
      yield x 

# If there's only one item in the dictionary 
next([key] + list(flat(value)) for key, value in d.items()) 
# => ['AA', 'No Av', 'Ave', 3.35, 'Max', 0.9, 'Min', -6.8, 'analist disp:', 
#  -5.0, u' AA: Jan 11, 2016\t\t\t'] 

如果有多個項目,使用以下代替:

import itertools 
list(itertools.chain.from_iterable(
    [key] + list(flat(value)) for key, value in d.items() 
)) 
# => ['AA', 'No Av', 'Ave', 3.35, 'Max', 0.9, 'Min', -6.8, 'analist disp:', 
#  -5.0, u' AA: Jan 11, 2016\t\t\t'] 
+0

謝謝你的替代品,併爲expanation! – Diego

+0

@Diego,不客氣。快樂的Python編程! – falsetru