遍历python中的列表的索引错误

时间:2019-05-15 18:23:11

标签: python python-3.x mapping

所以我有这个文件,每行包含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:列表索引超出范围”。我该如何解决?谢谢!

2 个答案:

答案 0 :(得分:1)

在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)

答案 1 :(得分:0)

对于字典,通常使用.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导致最后一行为空白。