2

私はPythonの初心者で、単語ゲームを作っています。{"player 1":0, "player 2":0}そして、2 人のプレーヤーのスコアを追跡する辞書を用意します。

もう一度プレイするオプションがあるので、スコアを常にその辞書に保存する必要があります。

しかし、これを使用して各ラウンドの後にこの辞書の値を取得すると:

for value, index in enumerate(players):
      print index, " : ", value

ラウンド数に関係なく、これを取得します。

Player 2 : 0
Player 1 : 1

しかし、私が使用するとき:

for index in players:
     print index, " : ", players.get(index, 0)

必要な実際の値を取得します。

私の質問は、2 つの方法を使用して値を取得することの違いは何ですか?

4

3 に答える 3

6

enumerate辞書を反復処理していますが、デフォルトでは、キーのみを反復処理します:

iter(d)

辞書のキーに対する反復子を返します。これは iterkeys() のショートカットです。

おそらく必要なのは、items()またはvalues()です。

アイテム()

ディクショナリの(キー、値) ペアのリストのコピーを返します。

値()

ディクショナリの値のリストのコピーを返します。dict.items() の注を参照してください。

私はあなたがこれを望んでいると思います:

for name, score in players.items():
      print name, " : ", score

または多分:

for index, (name, score) in enumerate(players.items()):
      print index, " : ", name, " : ", score

他の 2 つの可能性を示すために、このメソッドはすべての名前を検索します。

for name in players: # or players.keys()
    print name

そして、これはスコアを検索します(名前なし):

for score in players.values():
    print score
于 2012-10-01T21:50:02.053 に答える
2

enumerate メソッドは、インデックスと値のペアを返します。ディクショナリの列挙では、キー コレクションが列挙されているようです (これが、キーが表示される理由です)。

于 2012-10-01T21:46:24.370 に答える
2

ここに、

for value, index in enumerate(players): 
    print index, " : ", value

valuevalueenumerate のカウンタです。そのため、常に0、1、2、3 から始まることがわかります。

あなたが本当に望んでいたのは

for index, value in enumerate(players): 
    print value, " : ", players[value] # .get works as well

辞書は順序付けされていないため、辞書を列挙することは一般的にほとんど意味がありません。

于 2012-10-01T21:47:22.430 に答える