Python 如何循环遍历两个列表并附加键、val对?

Python 如何循环遍历两个列表并附加键、val对?,python,loops,dictionary,Python,Loops,Dictionary,我尝试在文本文件中进行两次循环,并创建一个dict,其中包含dict[line\u index]=word\u index\u position,这意味着键是行号,值是该行中的所有单词。目标是创建一个“矩阵”,以便用户以后能够指定x、y坐标(直线、单词索引位置)并检索这些坐标中的单词(如果有)(不确定如何使用dict,因为它没有排序)。下面是创建dict的循环 try: f = open("file.txt", "r") except Exception as e: print(

我尝试在文本文件中进行两次循环,并创建一个dict,其中包含
dict[line\u index]=word\u index\u position
,这意味着键是行号,值是该行中的所有单词。目标是创建一个“矩阵”,以便用户以后能够指定x、y坐标(直线、单词索引位置)并检索这些坐标中的单词(如果有)(不确定如何使用dict,因为它没有排序)。下面是创建dict的循环

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
循环按预期工作,但是
upplagk[num_lines]=word
似乎只存储每行中的最后一个单词。任何指导都将不胜感激


非常感谢,

upplagk[num\u lines]=word
每次调用时都会覆盖关键字
num\u 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]

而不是覆盖
单词

for word in line.split():
    print(num_lines)
    print(word)
    uppslag[num_lines] = word
您最好保存整条线路:

uppslag[num_lines] = line.split()
这样,您就可以在第4行中找到第3个单词:

uppslag[4][3]

不需要字典或
.readlines()

打开(“file.txt”)作为单词\u文件:
words=[line.split()表示words\u文件中的行]

当您已经知道行号是连续序列时,为什么还要使用
dict
?只需使用2d列表即可。您应该真正使用上下文管理器来处理该文件对象。您可以直接迭代文件对象,无需使用
.readlines()
@AjayDabas是正确的,特别是因为您编写的目标是创建一个“矩阵”,以便用户以后能够指定x、y坐标(直线、单词索引位置)并检索这些坐标中的单词,如果有any@AMC原因是因为特定的练习指定了dict的使用,我非常感谢AjayDabas的建议,我同意这是一个更好的解决方案!这真是太好了,感谢您花时间提供这个解决方案,并展示了如何对dict进行索引。非常感谢!对于这个练习来说,这几乎是紧凑的,必须说我真的印象深刻。感谢您花时间展示如何做到这一点!谢谢你指出这一点,我相应地编辑了我的答案。