在Python中索引字典的值?

时间:2019-05-05 11:59:02

标签: python python-3.x dictionary

我正在尝试修复一个非常简单的pygame迷你游戏,但是我对字典不是很熟悉。因此,我有一本字典,其中包含四个怪物(键)及其各自的开始位置,作为列表中的值。为了用pygame绘制它们或使它们移动,我想使用一个for循环来遍历字典,但是似乎我无法索引字典的值,所以我有点卡住了。

以下是我用来绘制怪物的尝试:

monsterStart={"M1":[40,40], "M2":[580,40], "M3":[40,380], "M4":[580,380]}
global monsterStart

def drawMonsters(monsters): 
    monsters=monsterStart

    for monster in monsters: 
        monsterPosition = monsters[monster]
        MP_x = monsterPosition[0]
        MP_y = monsterPosition[1]
        pygame.draw.rect(DISPLAYSURFACE, Blue, (MP_x, MP_y, 20, 20)) 

drawMonsters(monsterStart)

当我尝试运行我的代码时,它给了我这个错误:

Traceback (most recent call last):
File "cave_room_bonus.py", line 457, in drawMonsters
    monsterPosition = monsters[monster]
TypeError: tuple indices must be integers or slices, not dict

不幸的是,我无法弄清楚出什么问题或想出另一种方法对此编程。我在编程领域比较陌生,因此,我将为您提供一些帮助!

1 个答案:

答案 0 :(得分:1)

您可以通过访问字典中的键来获取怪物列表(我认为它们是M1,M2,...,M n )。由于密钥应该是唯一的,所以它们的行为可以像您所描述的那样。

您的函数将如下所示:

class Test:
    def __call__(self, a, b, c):
        return a + b + c

class Test2 (Test):
    def __call__(self, a, b):
        return a + b

result1 = Test()(a, b, c)
result2 = Test2()(a, b)

您还可以运行此命令以查看字典的工作方式:

# Passing our dictionary as a default argument for illustrative purposes.
def drawMonsters(monster_start_dict=monsterStart):    
    for monster in monster_start_dict.keys(): 
        monsterPosition = monster_start_dict[monster]
        MP_x = monsterPosition[0]
        MP_y = monsterPosition[1]
        pygame.draw.rect(DISPLAYSURFACE, Blue, (MP_x, MP_y, 20, 20))

输出:

for monster in monsterStart.keys():
    monsterPosition = monsterStart[monster]
    print(monster, ' -> ', monsterPosition)

或者,直接调用值位置(如函数中的0和1):

M1  ->  [40, 40]
M2  ->  [580, 40]
M3  ->  [40, 380]
M4  ->  [580, 380]

输出:

for monster in monsterStart.keys(): 
    print('X -> ', monsterStart[monster][0])
    print('y -> ', monsterStart[monster][1])
    print('')

这将使您进一步简化功能:

X ->  40
y ->  40

X ->  580
y ->  40

X ->  40
y ->  380

X ->  580
y ->  380

最后,使用列表理解:

def drawMonsters(monster_start_dict=monsterStart):    
    for m in monster_start_dict.keys(): 
        pygame.draw.rect(DISPLAYSURFACE, Blue, (monster_start_dict[m][0], monster_start_dict[m][1], 20, 20))