在python中迭代列表时出现索引错误

2024-06-16 11:27:33 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个文件,每行包含2个单词。看起来像这样。你知道吗

[/lang:F    </lang:foreign>
[lipmack]   [lipsmack]
[Fang:foreign]  <lang:foreign>

第一个单词的格式不正确,第二个单词的格式正确。我想把它们放进字典里。下面是我的代码。你知道吗

textFile = open("hinditxt1.txt", "r+")
textFile = textFile.readlines()
flist = []
for word in textFile:
    flist.append(word.split())

fdict = dict()    
for num in range(len(flist)):
    fdict[flist[num][0]] = flist[num][1]

我先把它们分开,然后把它们放进字典里。但由于某种原因,当我试图将它们放入字典时,会得到“IndexError:list index out of range”。我能做些什么来修复它?谢谢!你知道吗


Tags: 文件inlangfor字典格式range单词
2条回答

对于字典,通常使用.update()方法添加新的键值对。它看起来更像:

for num in range(len(flist)):
    fdict.update({flist[num][0] : flist[num][1]})

不读取文件的完整示例如下所示:

in_words = ["[/lang:F    </lang:foreign>",
"[lipmack]   [lipsmack]",
"[Fang:foreign]  <lang:foreign>"]

flist = []
for word in in_words:
    flist.append(word.split())

fdict = dict()
for num in range(len(flist)):
    fdict.update({flist[num][0]: flist[num][1]})

print(fdict)

屈服:

{'[lipmack]': '[lipsmack]', '[Fang:foreign]': '<lang:foreign>', '[/lang:F': '</lang:foreign>'}

尽管您的输出可能会有所不同,因为字典不保持顺序。你知道吗

正如@Alex所指出的,IndexError很可能是由于您的数据格式不正确(例如,一行上只有1或0个项目)。我怀疑最可能的原因是文件末尾的\n导致最后一行为空。你知道吗

在python中,迭代列表中的项比迭代一系列新的索引要好。我猜IndexError来自输入文件中的一行,该行为空或不包含任何空格。你知道吗

with open("input.txt", 'r') as f:
    flist = [line.split() for line in f]

fdict = {}
for k, v in flist:
    fdict[k] = v

print(fdict)

上面的代码通过简单地迭代列表本身的项来避免使用索引访问列表的元素。我们可以通过使用dict理解来进一步简化这一点:

with open("input.txt", 'r') as f:
    flist = [line.split() for line in f]

fdict = {k: v for k, v in flist}
print(fdict)

相关问题 更多 >