如何遍历两个列表并附加键,值对?

时间:2020-01-25 14:31:47

标签: python loops dictionary

我正在尝试两次遍历文本文件,并创建一个包含dict[line_index]=word_index_position的字典,这意味着键是行号,值是该行中的所有单词。目标是创建一个“矩阵”,以便以后的用户应该能够指定x,y坐标(直线,word_index_position),并在这些坐标中检索一个单词(如果有的话)(不确定如何处理)使用字典,因为它没有顺序)。下面是创建字典的循环。

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

循环按预期工作,但是uppslag[num_lines] = word似乎只在每行中存储最后一个单词。任何指导将不胜感激。

非常感谢,

3 个答案:

答案 0 :(得分:1)

每次调用

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]

答案 1 :(得分:1)

而不是覆盖word

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

保存整个行可能会更好:

uppslag[num_lines] = line.split()

这样,您将可以在第四行找到第三个单词,如下所示:

uppslag[4][3]

答案 2 :(得分:0)

不需要字典或.readlines()

with open("file.txt") as words_file:
    words = [line.split() for line in words_file]