Ошибка индексации по списку в python - PullRequest
0 голосов
/ 15 мая 2019

Итак, у меня есть этот файл, который содержит 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 ]

1 голос
/ 15 мая 2019

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

Приведенный выше код исключает необходимость доступа к элементам списка с помощью индексапросто перебирая элементы самого списка.Мы можем еще больше упростить это, используя сложное понимание:

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

fdict = {k: v for k, v in flist}
print(fdict)
0 голосов
/ 15 мая 2019

В словарях обычно используется метод .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 в конце вашего файла, из-за которого последние строки будут пустыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...