Python - 使用这两种方法在字典中获取值之间的区别

时间:2012-10-01 21:41:41

标签: python dictionary enumerate

我是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)

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

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

3 个答案:

答案 0 :(得分:6)

enumerate正在遍历字典,但默认情况下,您仅iterate over the keys

  

<强> 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

为了演示另外两种可能性,此方法查找所有名称:

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

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

for score in players.values():
    print score

答案 1 :(得分:2)

枚举方法返回索引,值对。看来字典枚举是枚举密钥集合(这就是你看密钥的原因)。

答案 2 :(得分: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

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