Как l oop через два списка и добавить ключ, пара val? - PullRequest
0 голосов
/ 25 января 2020

Я пробую два l oop через текстовый файл и создаю dict, который содержит dict[line_index]=word_index_position, что означает, что ключ - это номер строки, а значение - все слова в этой строке. Цель состоит в том, чтобы создать «матрицу», чтобы в дальнейшем пользователь мог указывать координаты x, y (строка, word_index_position) и извлекать слово в этих координатах, если оно есть (не уверен, как оно собирается работать с диктом, так как он не заказан). Ниже l oop для создания диктанта.

try:
    f = open("file.txt", "r")
except Exception as e:
    print("Skriv in ett korrekt filnamn")
uppslag = dict()
num_lines = 0

for line in f.readlines():
    num_lines += 1
    print(line)
    for word in line.split():
        print(num_lines)
        print(word)
        uppslag[num_lines] = word
f.close()
uppslag

L oop работает так, как должно, но, похоже, uppslag[num_lines] = word хранит только последнее слово в каждой строке. Любое руководство будет высоко ценится.

Большое спасибо,

Ответы [ 3 ]

1 голос
/ 25 января 2020

Вместо перезаписи word:

for word in line.split():
    print(num_lines)
    print(word)
    uppslag[num_lines] = word

лучше сохранить всю строку:

uppslag[num_lines] = line.split()

Таким образом, вы сможете найти 3-й слово в 4-й строке как:

uppslag[4][3]
1 голос
/ 25 января 2020

uppslag[num_lines] = word перезаписывает словарную запись для ключа num_lines каждый раз, когда она вызывается. Вы можете использовать список для хранения всех слов:

for line in f:
    num_lines += 1
    print(line)

    uppslag[num_lines] = []  # initialize dictionary entry with empty list

    for word in line.split():
        print(num_lines, word)

        uppslag[num_lines].append(word) # add new word to list

Вы можете написать тот же код в более компактной форме, поскольку line.split() уже возвращает список:

for line_number, line in enumerate(f):
    uppslag[line_number] = line.split()

Если в каждой строке есть слово (т. Е. Индекс строки будет непрерывным), вы можете использовать список вместо словаря и сократить свой код до понимания списка в одну строку:

uppslag = [line.split() for line in f]
0 голосов
/ 26 января 2020

Нет необходимости в словаре, или .readlines().

with open("file.txt") as words_file:
    words = [line.split() for line in words_file]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...