← Все вопросы

Как построить «обратный индекс» слово → список позиций в тексте?

Задан 5 месяцев назад413 просмотров2 ответа
11

Хочу для каждого слова знать, на каких позициях (индексах) оно встречается в списке слов. Одно слово может повторяться несколько раз.

words = ["кот", "пёс", "кот", "мышь", "кот"]
# нужно {"кот": [0, 2, 4], "пёс": [1], "мышь": [3]}

2 ответа

20
✓ Принятый ответ — помог автору

enumerate даёт индекс, а defaultdict(list) копит позиции:

from collections import defaultdict
index = defaultdict(list)
for i, w in enumerate(words):
    index[w].append(i)
# {'кот': [0, 2, 4], 'пёс': [1], 'мышь': [3]}

Это и есть мини-версия инвертированного индекса, как в поисковиках: по слову сразу получаешь, где оно встречается. Позиции лежат по возрастанию, потому что ты идёшь по тексту слева направо.

6

То же без импорта: в цикле index.setdefault(w, []).append(i).

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект