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

Raf*_*del 2 python dictionary enumerate

我是Python的初学者,并制作文字游戏.并有一个字典,记录{"player 1":0, "player 2":0}两个球员得分.

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

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

for value, index in enumerate(players):
      print index, " : ", value
Run Code Online (Sandbox Code Playgroud)

无论玩了多少回合,我都会得到这个:

Player 2 : 0
Player 1 : 1
Run Code Online (Sandbox Code Playgroud)

但是当我使用时:

for index in players:
     print index, " : ", players.get(index, 0)
Run Code Online (Sandbox Code Playgroud)

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

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

Rei*_*ica 6

enumerate迭代字典,但默认情况下,您只迭代键:

ITER(d)

在字典的键上返回一个迭代器.这是iterkeys()的快捷方式.

你可能想要的是items()values().

项目()

返回字典的(键,值)对列表的副本.

值()

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

我想你想要这个:

for name, score in players.items():
      print name, " : ", score
Run Code Online (Sandbox Code Playgroud)

或者可能:

for index, (name, score) in enumerate(players.items()):
      print index, " : ", name, " : ", score
Run Code Online (Sandbox Code Playgroud)

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

for name in players: # or players.keys()
    print name
Run Code Online (Sandbox Code Playgroud)

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

for score in players.values():
    print score
Run Code Online (Sandbox Code Playgroud)