35

私は次のPythonコードを持っています:

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

そして、次のエラーが発生します。

TypeError: リストのインデックスは str ではなく整数でなければなりません

私は自分に近いエラーを探していましたが、その方法がわかりません。そのエラーは発生しませんでした。ええ、どうすれば文字列ではなく整数に変換できますか? 問題は から来ていると思いstr(player['score'])ます。

4

4 に答える 4

45

ではなくplayerになることを期待していましたか?dictlist

>>> 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
于 2013-01-07T15:28:07.407 に答える
9

player['score']あなたの問題です。player はどうやらlist'score' 要素がないことを意味します。代わりに、次のようにします。

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

もちろん、リストのインデックスを知っておく必要があります (私の例では 0 と 1 です)。

player['score']Python では次のようなものを使用できplayerますが、dict.

リストとディクテーションの両方について詳しくは、Python ドキュメントを参照してください。

于 2013-01-07T15:32:37.643 に答える
5

players整数でインデックスを付ける必要があるリストです。辞書のように使っているようです。たぶんあなたは開梱を使うことができます-次のようなもの:

name, score = player

playerリストが常に一定の長さである場合)。

それが何であり、どのように機能するかを知らなくても、私たちがあなたに与えることができるアドバイスはこれ以上ありませんquery

あなたが投稿したコード全体があまり意味をなさないことを指摘する価値があります。IndentationError2行目にあります。また、関数は反復可能なものをループしていますが、最初の反復中に無条件に戻ります。これは通常、実際に実行したいことではありません。

于 2013-01-07T15:27:10.313 に答える
1

リストは、(0、1、2 .... など) でインデックス付けできる一連のスペースです。したがって、players がリストの場合、players[0] またはplayers[1] が機能します。プレイヤーがディクショナリの場合、players["name"] が機能します。

于 2013-01-07T20:57:13.010 に答える