2017-02-17 126 views
0

如果我有這樣的的Python:映射列表的列表到字典

l=[[(1, 2), (1, 3)], [(1, 2), (2, 3)], [(1, 3), (2, 3)]] 

列表,並像這樣

d={(1, 2): 3.61, (1, 3): 5.0, (2, 3): 6.0} 

一本字典,我想製作一個包含列表的列表與出現在l鍵相關聯在d的值,象這樣

newlist=[[3.61,5.0],[3.61,6.0],[5.0,6.0]] 

我該怎麼辦?

我的嘗試是

newlist=[v for k, v in d.items() if l[[i]]==k for i in l] 

但這返回

TypeError: list indices must be integers, not list 
+3

'[[d [Y]爲在x和y]對於x在1]' – vaultah

回答

1

您嘗試不起作用,因爲首先其結果應該是清單的列表:您列表解析會(如果它會工作)構造一個值列表。

此外,它會在字典上循環一次(因爲這是左邊的for循環)。

你可以做到這一點少容易出錯和更高效:

newlist = [[d[x] for x in li] for li in l] 

這將工作給予所有元組的字典d鍵。如果這不是這種情況,則可以使用.get(..)並指定默認值(例如None):

newlist = [[d.get(x,None) for x in li] for li in l]