Как объединить значения-списки словаря в список по списку ключей в python?
Есть словарь с тремя списками в значениях и список с ключами. Как сделать список элементов значений словарей по ключам из списка ключей?
list_keys = ['first', 'second', 'third', 'first', 'second', 'first', 'second', 'first', 'third', 'second', 'third']
dict = {
'first': ['Darkness ', 'darkness; ', 'can do ', 'cannot drive '],
'second': ['cannot drive ', 'only light ', 'that. Hate ', 'only love '],
'third': ['out ', 'out hate; ', 'can do that.']
}
Должна получиться цитата известного человека, если сложить строки из словаря следуя списку ключей.
Заранее спасибо за помощь!
Ответы (2 шт):
Только я переименовал словарь. Нехорошо называть свои объекты так же, как называются встроенные объекты питона, потом сюрприз будет:
list_keys = ['first', 'second', 'third', 'first', 'second', 'first', 'second', 'first', 'third', 'second', 'third']
dict_lists = {
'first': ['Darkness ', 'darkness; ', 'can do ', 'cannot drive '],
'second': ['cannot drive ', 'only light ', 'that. Hate ', 'only love '],
'third': ['out ', 'out hate; ', 'can do that.']
}
for key in list_keys:
print(dict_lists[key].pop(0), end='')
Вывод:
Darkness cannot drive out darkness; only light can do that. Hate cannot drive out hate; only love can do that.
Ну или вот однострочник:
text = ''.join(dict_lists[key].pop(0) for key in list_keys)
P.S. Только учтите, что этот код меняет содержимое словаря (очищает списки), так что если словарь этот вам вдруг понадобится дальше, то нужно предварительно сделать "глубокую копию" и делать вышеописанное уже с ней:
from copy import deepcopy
dict_copy = deepcopy(dict_lists)
вам это что ли надо?
print(''.join(dict[key].pop(0) for key in list_keys))
или чуть с извратом:
print(*map(lambda key: dict[key].pop(0), list_keys), sep='')