2013-06-03 47 views
0

一本字典,其中值元素列表:拼接名單我一起

d1={'A': [], 'C': ['SUV'], 'B': []} 

我需要的值連接成一個單獨的列表,只有列表非空。
預期輸出:

o=['SUV'] 

幫助理解。

回答

6
from itertools import chain 
d1={'A': [], 'C': ['SUV'], 'B': []} 
print list(chain.from_iterable(d1.itervalues())) 
+2

這個答案比阿什溫的更好,因爲它充分利用了這一事實該鏈可以處理迭代器,而不僅僅是熱切生成的序列。 –

3

您可以使用itertools.chain,但順序可以是任意的,因爲字典是無序集合。因此,可能必須根據鍵或值對字典進行排序才能得到期望的結果。

>>> d1={'A': [], 'C': ['SUV'], 'B': []} 
>>> from itertools import chain 
>>> list(chain(*d1.values())) # or use d1.itervalues() as it returns an iterator(memory efficient) 
['SUV'] 
+1

請使用'chain.from_iterable'這些工作 – jamylak

3
>>> d1 = {'A': [], 'C': ['SUV'], 'B': []} 
>>> [ele for lst in d1.itervalues() for ele in lst] 
['SUV'] 
+0

+1;我喜歡這個解決方案,儘管我會用'itervalues'來代替'values'。 –

+0

@ SanjayT.Sharma Yup好點。 – Jared

0
>>> from operator import add 
>>> d1={'A': [], 'C': ['SUV'], 'B': []} 
>>> reduce(add,d1.itervalues()) 
['SUV'] 

或者更全面的例子:

>>> d2={'A': ["I","Don't","Drive"], 'C': ['SUV'], 'B': ["Boy"]} 
>>> reduce(add,d2.itervalues()) 
['I', "Don't", 'Drive', 'SUV', 'Boy'] 
+0

不幸的是,這有O(N^2)的行爲,因爲你正在每個'add'上創建一個新列表 – jamylak

+0

@jamylak沒錯,這是一個非常低效率的方法(只需要將功能方法放在那裏) – HennyH

+0

那麼''' 'sum(d2.itervalues(),[])''' – oleg