#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]]