Подтвердить что ты не робот

Ошибка Python при попытке доступа к списку по индексу - "Индексы списков должны быть целыми, а не str"

У меня есть следующий код Python:

currentPlayers = query.getPlayers()
    for player in currentPlayers:
        return str(player['name'])+" "+str(player['score'])

И я получаю следующую ошибку:

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

Я искал ошибку рядом с моей, но не уверен, как это сделать, никогда не получал эту ошибку. Итак, как я могу преобразовать его в целые числа вместо строки? Я думаю, проблема возникает из str(player['score']).

4b9b3361

Ответ 1

Вы ожидали, что player будет dict, а не list?

>>> player=[1,2,3]
>>> player["score"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not str
>>> player={'score':1, 'age': 2, "foo":3}
>>> player['score']
1

Ответ 2

player['score'] - ваша проблема. игрок, по-видимому, list, что означает, что элемента "счет" нет. Вместо этого вы сделаете что-то вроде:

name, score = player[0], player[1]
return name + ' ' + str(score)

Конечно, вам нужно будет знать индексы списка (это то, что есть 0 и 1 в моем примере).

В python допустимо что-то вроде player['score'], но player должно быть dict.

Подробнее о обоих списках и dicts вы можете узнать в документации python.

Ответ 3

players - это список, который нужно индексировать целыми числами. Кажется, вы используете его, как словарь. Возможно, вы можете использовать распаковку - Что-то вроде:

name, score = player

(если список player всегда является постоянной длиной).

Не так много советов, которые мы можем дать вам, не зная, что такое query и как оно работает.

Стоит отметить, что весь код, который вы опубликовали, не имеет большого смысла. Там IndentationError на второй строке. Кроме того, ваша функция перебирает некоторые повторяющиеся, но безоговорочно возвращается во время первой итерации, которая обычно не является тем, что вы действительно хотите сделать.

Ответ 4

Список представляет собой цепочку пробелов, которая может быть проиндексирована (0, 1, 2.... и т.д.). Поэтому, если игроки были списком, игроки [0] или игроки [1] работали бы. Если игроки являются словарем, игроки [ "name" ] работали бы.