2

我是 Python 的初学者,正在做一个文字游戏。并有一本记录{"player 1":0, "player 2":0}两名球员得分的字典。

我有一个再次播放选项,所以我需要始终将分数存储到该字典中。

但是当我在每一轮之后使用这个检索这个字典值时:

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)

我得到了我想要的实际值。

我的问题是使用这两种方法获取值有什么区别?

4

3 回答 3

6

enumerate正在遍历字典,但默认情况下,您仅遍历键

迭代(d)

返回字典的迭代器。这是 iterkeys() 的快捷方式。

您可能想要的是items()values()

项目()

返回字典的(key, value) 对列表的副本。

值()

返回字典的值列表的副本。请参阅 dict.items() 的注释。

我想你想要这个:

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

或许:

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

只是为了演示其他两种可能性,此方法查找所有名称:

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

这会查找分数(没有名字):

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

enumerate 方法返回索引、值对。似乎对于字典 enumerate 正在枚举键集合(这就是您看到键的原因)。

于 2012-10-01T21:46:24.370 回答
2

在这里,

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

value是枚举的计数器,这就是为什么你总是会看到value从 0,1,2,3,...

我想你真正想要的是

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

枚举字典通常没有什么意义,因为字典是无序的。

于 2012-10-01T21:47:22.430 回答