2017-01-18 102 views
1
d = {'a':[1,2,3], 'b':[4,5]} 

,我使用列表理解需要提取列表元素

[1,2,3,4,5] 

。我該怎麼做?

+1

你想在任何特定的順序輸出? (Python字典沒有內在排序。) – DyZ

+0

訂單不重要 –

回答

5

使用嵌套列表理解:

>>> [val for lst in d.values() for val in lst] 
[1, 2, 3, 4, 5] 

但是你可能需要先排序的字典(因爲類型的字典是無序的),以保證順序:使用

>>> [val for key in sorted(d) for val in d[key]] 
[1, 2, 3, 4, 5] 
+0

編號排序列表comp比較好。 – MYGz

+1

@MYGz這取決於,我認爲他想獲得所有的值取決於(排序)的鍵的順序。不排序所有鍵的所有值。 – MSeifert

+0

那就對了。按鍵排序或按值排序。另外還有1種可能性:) – MYGz

1

容易和一個班輪解決方案列表理解

>>> sorted([num for val in d.values() for num in val]) 
    [1, 2, 3, 4, 5] 
0

如果因爲每個臨時列表適用a = a + b

sum(d.values(), []) 

(如果需要添加sorted()。)

1

sum(d.values(),[])作品,但不是高性能:元素的順序並不重要,那麼你就不能打敗這個。

使用itertools.chain.from_iterable代替:

import itertools 
print(list(itertools.chain.from_iterable(d.values()))) 

或排序版本:

print(sorted(itertools.chain.from_iterable(d.values()))) 
+1

'chain.from_iterable'可能比解包('* d.values()')更好更快。 – MSeifert

+0

爲什麼我總是忘記? –

+0

可能是因爲更多類型:-) – MSeifert