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