Сопоставьте элементы во вложенном списке со значениями из словаря

#python

#python

Вопрос:

У меня есть список

 l = [['a', 's', 'l'], ['a', 'g', 'l'], ['a', 's', 'l'], ['g', 's', 'l'], ['a', 'l', 'g']]
  

У меня также есть словарь

 d = [{'a': 1, 'v': 6, 'c': 7}, {'g': 3, 's': 4, 'l': 9}]
  

Мне нужно создать другой список в форме l , но со значениями, подобранными из d :

 d = [[1, 4 ,9], [1, 3 , 9], [1, 4 , 9], [3, 4 , 9], [1, 9 , 3]]
  

Я пытался использовать для этого циклы, но вложенный список вызывает у меня проблемы.

Любая помощь будет оценена.

Комментарии:

1. Каков ваш ожидаемый результат? Было бы полезно получить дополнительную информацию о том, чего именно вы пытаетесь достичь.

2. Можно ли объединить все словари в d ? (предположительно, так, иначе ответ был бы неоднозначным)

3. Кроме того, l и d плохо отформатированы.

Ответ №1:

Простое понимание будет работать:

 combined_mapping = {k: v for subdict in d for k, v in subdict.items()}
mapped = [[combined_mapping[element] for element in sublist] for sublist in l]
mapped
  

Вывод:

 [[1, 4, 9], [1, 3, 9], [1, 4, 9], [3, 4, 9], [1, 9, 3]]
  

Ответ №2:

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

 d = dict(i for s in d for i in s.items())
print([list(map(d.get, s)) for s in l])
  

так что, учитывая:

 l = [['a', 's' ,'l'], ['a', 'g' , 'l'], ['a', 's' , 'l'], ['g', 's' , 'l'], ['a', 'l' , 'g']]
d = [{'a': 1, 'v': 6, 'c': 7}, {'g': 3, 's': 4, 'l': 9}]
  

Это выводит:

 [[1, 4, 9], [1, 3, 9], [1, 4, 9], [3, 4, 9], [1, 9, 3]]
  

Ответ №3:

Я не понимаю, почему ваша d переменная на самом деле является списком словарей. Если бы это был настоящий словарь, это было бы очень просто:

 l = [['a', 's', 'l'], ['a', 'g', 'l'], ['a', 's', 'l'], ['g', 's', 'l'], ['a', 'l', 'g']]
d = {'a': 1, 'v': 6, 'c': 7, 'g': 3, 's': 4, 'l': 9}

r = [ [d[v] for v in lv] for lv in l ]
print(r) # [[1, 4, 9], [1, 3, 9], [1, 4, 9], [3, 4, 9], [1, 9, 3]]