2017-02-17 1 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} 

, и я хочу, чтобы создать список списков, который содержит значения в d, связанные с клавишами, которые появляются в l, как это

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 [у] для у в й] для й в л]' – 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] 
Смежные вопросы