2012-01-11 34 views
1

我有一個對象列表(集羣),每個對象都有一個屬性vertices這是一個數字列表。我想構造一個字典(使用一個班輪),使得這個鍵是一個頂點號,這個值是實際列表中相應的集羣的索引。構建一個合併多個列表的字典

例:

clusters[0].vertices = [1,2] 
clusters[1].vertices = [3,4] 

預期輸出:

{1:0,2:0,3:1,4:1} 

我想出了以下內容:

dict(reduce(lambda x,y:x.extend(y) or x, [ 
    dict(zip(vertices, [index]*len(vertices))).items() 
    for index,vertices in enumerate([i.vertices for i in clusters])])) 

它的工作原理......但有沒有這樣做的更好的辦法這個?

也評論上述代碼的效率。

PS:頂點列表不相交。

+6

您的意思是預期輸出:{1:0,2:0,3:1,** 4:1 **}? – kasyc 2012-01-11 10:55:59

+0

對不起..更新了:) – Graddy 2012-01-11 11:03:46

+0

我建議你寫一個函數來做到這一點,然後你的一行是一個函數調用。 [可讀性計數](http://www.python.org/dev/peps/pep-0020/) – MattH 2012-01-11 11:07:54

回答

5

這是一個相當簡單的解決方案,使用嵌套for

dict((vert, i) for (i, cl) in enumerate(clusters) for vert in cl.vertices) 

這也比問題的版本更高效,因爲它不建立大量中間列表的同時收集的數據字典。

相關問題