#python
#python
Вопрос:
У меня есть словарь, где значение представляет собой список из нескольких подстрок из ключа, который является строкой. Например:
d = {"How are things going": ["going","How"], "What the hell" : ["What", "hell"], "The police dept": ["dept","police"]}
и я хочу получить список списков, сгенерированных из значений списка на основе позиции, в которой они появились в ключе. Например, в приведенном выше случае:
output = [["How", "going"], ["What", "hell"], ["police", "dept"]]
Я не нашел эффективного способа сделать это, поэтому я использовал хакерский подход:
final_output = []
for key,value in d.items():
if len(value) > 1:
new_list = []
for item in value:
new_list.append(item, key.find(item))
new_list.sort(key = lambda x: x[1])
ordered_list = [i[0] for i in new_list]
final_ouput.append(ordered_list)
Ответ №1:
Используйте sorted
с str.find
:
[sorted(v, key=k.find) for k, v in d.items()]
Вывод:
[['How', 'going'],
['What', 'hell'],
['police', 'dept']]
Ответ №2:
Использование понимания списка
output = [[each_word for each_word in key.split() if each_word in value] for key, value in d.items()]
Ответ №3:
Ключи уже отсортированы, поэтому мы можем пропустить сортировку
мы можем разделить ключ на " "
и отфильтровать разделенное по соответствующему значению в dict
d = {"How are things going": ["going","How"], "What the hell" : ["What", "hell"], "The police dept": ["dept","police"]}
lists = []
for k in d.keys():
to_replace = k.split(" ")
replaced = filter(lambda x: x in d[k],to_replace)
lists.append(list(replaced))
print(lists)
Вывод:
[['How', 'going'], ['What', 'hell'], ['police', 'dept']]