индексное слово в словаре - PullRequest
0 голосов
/ 15 октября 2018

У меня есть текстовый файл, в котором я хочу каждое слово в текстовом файле в словаре, а затем распечатываю позицию индекса каждый раз, когда слово находится в текстовом файле.Код, который я имею, только дает мне количество раз, когда слово находится в текстовом файле.Как я могу изменить это?Я уже перешел в нижний регистр.

dicti = {}  

for eachword in wordsintxt:
    freq = dicti.get(eachword, None)
    if freq == None:
        dicti[eachword] = 1
    else:
        dicti[eachword] = freq + 1

print(dicti)

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Вы можете использовать это:

wordsintxt = ["hello", "world", "the", "a", "Hello", "my", "name", "is", "the"]
words_data = {}

for i, word in enumerate(wordsintxt):
    word = word.lower()
    words_data[word] = words_data.get(word, {'freq': 0, 'indexes': []})
    words_data[word]['freq'] += 1
    words_data[word]['indexes'].append(i)


for k, v in words_data.items():
    print(k, '\t', v)

Что печатает:

hello    {'freq': 2, 'indexes': [0, 4]}
world    {'freq': 1, 'indexes': [1]}
the      {'freq': 2, 'indexes': [2, 8]}
a        {'freq': 1, 'indexes': [3]}
my       {'freq': 1, 'indexes': [5]}
name     {'freq': 1, 'indexes': [6]}
is       {'freq': 1, 'indexes': [7]}

Вы можете избежать проверки, существует ли значение в вашем словаре, а затем выполнить пользовательское действие, просто используя data[key] = data.get(key, STARTING_VALUE)

Привет!

0 голосов
/ 15 октября 2018

Используйте collections.defaultdict с enumerate, просто добавьте все индексы, полученные из перечисления

from collections import defaultdict

with open('test.txt') as f:
    content = f.read()

words = content.split()
dd = defaultdict(list)

for i, v in enumerate(words):
    dd[v.lower()].append(i)

print(dd)
# defaultdict(<class 'list'>, {'i': [0, 6, 35, 54, 57], 'have': [1, 36, 58],... 'lowercase.': [62]})
0 голосов
/ 15 октября 2018

Измените свой код, чтобы сохранить сами индексы, а не просто считать их:

for index, eachword in enumerate(wordsintxt):
    freq = dicti.get(eachword, None)
    if freq == None:
        dicti[eachword] = []
    else:
        dicti[eachword].append(index)

Если вам все еще нужна частота слова: это легко восстановить:

freq = len(dicti[word])

Обновление для каждого комментария OP

Без enumerate, просто предоставьте эту функцию самостоятельно:

for index in range(len(wordsintxt)):
    eachword = wordsintxt[i]

Я не уверен, почему вы хотите это сделать;эта операция идиоматична и достаточно распространена, и разработчики Python создали enumerate именно для этой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...