TypeError: индексы списка должны быть целыми или кусочками, а не строкой - PullRequest
0 голосов
/ 22 февраля 2019

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

вот что я пытаюсь запустить Код:

u0 +++ $ +++ u2 +++ $ +++ m0 +++ $ +++ ['L194', 'L195', 'L196', 'L197']

u0 +++ $ +++ u2 +++ $ +++ m0 +++ $ +++ ['L198 ',' L199 ']

u0 +++ $ +++ u2 +++ $ +++ m0 +++ $ +++ [' L200 ',' L201 ',' L202 ','L203']

u0 +++ $ +++ u2 +++ $ +++ m0 +++ $ +++ ['L204', 'L205', 'L206'] * ​​1011 *

u0 +++ $ +++ u2 +++ $ +++ m0 +++ $ +++ ['L207', 'L208']

conversations_fields = ['Character_one_ID' , 'Character_two_ID' , 'Movie_ID' , 'utteranceIDs']
conversations = []
with open("./cornell movie-dialogs corpus/movie_conversations.txt", 'r', encoding='iso-8859-1') as f:
    for line in f:
        values = line.split(" +++$+++ ")
        # Extract fields
        convObj = {}
        for i, field in enumerate(conversations_fields):
            convObj[field] = values[i]
        # Convert string to list (convObj["utteranceIDs"] == "['L598485', 'L598486', ...]")
        lineIds = eval(convObj["utteranceIDs"])
        # Reassemble lines
        convObj['lines'] = []
        for lineId in lineIds:
            convObj['lines'].append(lines[lineId]
        conversations.append(convObj)

TypeError Traceback (самая последняяпоследний вызов)

 <ipython-input-34-d7002161f69c> in <module>()

 13         convObj['lines'] = []
 14         for lineId in lineIds:
 ---> 15             convObj['lines'].append(lines[lineId])
 16         conversations.append(convObj)

TypeError: индексы списка должны быть целыми или кусочками, а не str

1 Ответ

0 голосов
/ 22 февраля 2019

lineIds = convObj['utteranceIDs'] заполнено eval из "['L194', 'L195', 'L196', 'L197']" - см. Почему использование 'eval' является плохой практикой? :

   lineIds = eval(convObj["utteranceIDs"])

lineIds - это список строк, lineID - это также строка ("L194" затем "L195" и т. Д.) - вы не можете использовать ее для индексации в lines:

   for lineId in lineIds:
       convObj['lines'].append(lines[lineId])   # you also missed a ) here  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...