2017-02-17 66 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]