2017-07-27 82 views
1

我有嵌套列表字典:嵌套表與數組

L = [[15,10], [11], [9,7,8]] 

,並需要數組像[15, 10]0組,[11]1組和[9,7,8]2組 - 輸出字典:

print (d) 
{7: 2, 8: 2, 9: 2, 10: 0, 11: 1, 15: 0} 

我試試:

d = {k:v for k,v in enumerate(L)} 
d = {k: oldk for oldk, oldv in d.items() for k in oldv} 
print (d) 
{7: 2, 8: 2, 9: 2, 10: 0, 11: 1, 15: 0} 

我認爲我的解決方案有點過於複雜。有一些更好的,更pythonic的解決方案?

回答

2

關於使用什麼:

d = {v: i for i,l in enumerate(L) for v in l} 

其產生:

>>> {v: i for i,l in enumerate(L) for v in l} 
{7: 2, 8: 2, 9: 2, 10: 0, 11: 1, 15: 0} 

的想法如下:首先,我們遍歷Lenumerate(L),因此,我們得到索引i子列表的vs。接下來我們遍歷vs中的每個元素v。對於每個v,我們將vi聯繫在一起。

如果存在衝突 - 在L中出現兩次的值 - 則使用最後一個索引。

2

您可以使用:

d = {v: i for i in range(len(L)) for v in L[i]} 

輸出:

{7: 2, 8: 2, 9: 2, 10: 0, 11: 1, 15: 0} 

遍歷L使用range(len(L))訪問各列表,指定每個value作爲字典的key,而列表中的索引作爲value