как написать программу, которая принимает список строк в качестве входных данных и возвращает словарь, содержащий индекс слов для соответствующих строк

#python #string #function #dictionary

Вопрос:

Правила: В словаре каждый ключ будет словом k, а значение будет представлять собой список индексов входных строк, в которых появляется слово k.

Слова должны рассматриваться только в нижнем регистре. т. е. «Привет» и «Привет» должны рассматриваться одинаково.

можно предположить, что набор данных будет содержать только списки строк. нет необходимости проверять тип элементов в наборе данных.

Строковые данные в наборе данных будут чистыми. не нужно беспокоиться об очистке, т. е. об удалении знаков препинания или цифр.

В приведенном ниже примере функция определяет, каковы индексы слов в данном наборе данных. набор данных-это список, содержащий строки.

Функция reverse_index должна создавать и возвращать словарь.

  dataset = [  "Hello world",  "This is the WORLD",  "hello again"  ] res = reverse_index(dataset)  # This assertion checks if the result equals the expected dictinary assert(res == {  'hello': [0, 2],  'world': [0, 1],  'this': [1],  'is': [1],  'the': [1],  'again':[2]  })   

Я не совсем уверен, что делать дальше, но именно так я начал

 dataset = [  "Hello world",  "This is the WORLD",  "hello again"  ]   def reverse_index(dataset):    

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

1. Выполните итерацию по набору данных, установите каждую строку в нижний регистр, разделите ее на отдельные слова, добавьте ее в результат с соответствующим значением или добавьте к значению, если ключ уже есть. Если у вас есть конкретная проблема при решении этой проблемы самостоятельно, вы можете задать ее здесь со своим кодом.

Ответ №1:

Вы можете использовать collections.defaultdict в качестве основы и небольшую петлю:

 from collections import defaultdict res = defaultdict(list) for i,s in enumerate(dataset):  for w in set(map(str.lower, s.split())):  res[w].append(i) dict(res)  

выход:

 {'hello': [0, 2],  'world': [0, 1],  'is': [1],  'the': [1],  'this': [1],  'again': [2]}  

Ответ №2:

Вы можете попробовать этот метод

 def reverse_index(data):  res = dict()  for i in range(len(data)):  for word in map(str.lower,data[i].split()):  if word not in res:  res[word] = [i,]  else:  res[word].append(i)  return res  

выход:

 {  'hello': [0, 2],  'world': [0, 1],  'this': [1],  'is': [1],  'the': [1],  'again':[2] }