Добавление слов из файла в словарь - PullRequest
0 голосов
/ 24 ноября 2018

Я хочу добавить каждое слово из текстового файла в словарь, как мне это сделать?

(у меня есть файл 'words.txt', я открыл и прочитал файл, а список слов находится в переменной "lines" ниже)

d = {}

for i in lines:
    for word in i.split():
        d[???] = word

Какой код делатьЯ положил, где "???"is?

Я хочу, чтобы словарь выглядел так:

{0: firstword, 1: secondword, 2: thirdword, 3: fourthword...}

Я подумал, что получение позиции индекса для каждого слова в списке может сработать, но я не совсем уверен, каксделать это.

Это не кажется слишком сложным, но я застрял.

Ответы [ 5 ]

0 голосов
/ 24 ноября 2018

Сначала откройте файл и напишите несколько строк.

fname = 'textfile.txt'
with open(fname, 'w') as textfile:
    textfile.write('zero one two three four five\n')
    textfile.write('six seven eight nine ten')

Перечислите слова так, как вы пожелаете.Если вы используете выражение генератора, оно прекрасно работает с пониманием слова.

word_positions = {}
with open(fname, 'r') as textfile:
    words = (word for line in textfile.readlines() for word in line.split())
    word_positions = {i: word for i, word in enumerate(words)}

Это дает,

word_positions

{0: 'zero',
 1: 'one',
 2: 'two',
 3: 'three',
 4: 'four',
 5: 'five',
 6: 'six',
 7: 'seven',
 8: 'eight',
 9: 'nine',
 10: 'ten'}
0 голосов
/ 24 ноября 2018

Существует множество ответов на вопросы , почему вам нужно сделать это правильно, однако я постараюсь ответить на прямой вопрос.Кроме того, я думаю, что иметь дело с дубликатами необходимо.Нижний индекс (первое слово видно) имеет приоритет ... что является предположением с моей стороны, но имеет смысл рассмотреть ваш вопрос.

#first populate a word:index dictionary
#ensure duplicates don't overwrite...for this use "in" which is fast
d1 = {}
ix = 0
for i in lines:
    for word in i.split():
        if word not in d1:
            #only add word to the dict if it is NOT already in (addressing duplicates)
            d1[word] = ix
            ix += 1

#now "reverse" the dict
d = {}  #new dict
for word in d1:
    d[d1[word]] = word

теперь у вас есть слово в слове: индекс с уникальными словами + индекс

0 голосов
/ 24 ноября 2018

Вы можете отслеживать «текущий индекс» в отдельной переменной c и использовать ее в качестве значения слова в своем словаре:

d = {}
c = 0

for i in lines:
    for word in i.split():
        d[word] = c
        c += 1

Обратите внимание, что здесь словарь будет хранитьсамый высокий индекс дублированного слова.

0 голосов
/ 24 ноября 2018

Каждая строка перезаписывает строку перед ней в вашем словаре.Но вы можете обойти это как:

d = {}
k = 0
for i in lines:
    for word in i.split():
        d[str(k)] = word
        k = k + 1

Почему вы используете словарь для этого?Словари полезны, когда они используются с ключами со значениями.Вы могли бы просто использовать список для этой задачи.

Кроме того, вы можете увеличить производительность, предварительно выделив свой список, а затем заполнить его своим алгоритмом.

0 голосов
/ 24 ноября 2018

скажем, у вас есть переменная words со списком слов ['firstword', 'secondword', 'thirdword', 'fourthword']

, поэтому ваш код будет выглядеть так:

d = {}
for k, v in enumerate(words):
    d[k] = v
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...