Python 为什么会说不可损坏类型:';列表';即使它是一根绳子?

Python 为什么会说不可损坏类型:';列表';即使它是一根绳子?,python,Python,但是我收到了错误 game_locs = ['a1', 'a2', 'a3', 'a4', 'b1', 'b2', 'b3', 'b4'] ZONENAME = ['Town Market', 'Town Entrance', 'Town Square', 'Town Hall', "", 'Home', "", "", ""] DESCRIPTION = 'description' EXAMINATION = 'examine' SOLVED = False UP = 'up', 'north

但是我收到了错误

game_locs = ['a1', 'a2', 'a3', 'a4', 'b1', 'b2', 'b3', 'b4']
ZONENAME = ['Town Market', 'Town Entrance', 'Town Square', 'Town Hall', "", 'Home', "", "", ""]
DESCRIPTION = 'description'
EXAMINATION = 'examine'
SOLVED = False
UP = 'up', 'north'
DOWN = 'down', 'south'
LEFT = 'left', 'west'
RIGHT = 'right', 'east'

zonemap = {}
for i in range(len(game_locs)):
    x = game_locs[i]
    if x[0] == 'a':
        if x[1] == '1':
            zonemap.update({'a1': {
                ZONENAME: ZONENAME[i],
                DESCRIPTION: "description",
                EXAMINATION: "examine",
                SOLVED: False,
                UP: "You cannot move up from here",
                DOWN: game_locs[i + 4],
                LEFT: "You cannot move left from here",
                RIGHT: game_locs[i + 1]
            }})
        elif x[1] == '4':
            zonemap.update({'a4': {
                ZONENAME: ZONENAME[i],
                DESCRIPTION: "description",
                EXAMINATION: "examine",
                SOLVED: False,
                UP: "You cannot move up from here",
                DOWN: game_locs[i + 4],
                LEFT: game_locs[i - 1],
                RIGHT: "You cannot move right from here"}
            })
        else:
            zonemap.update({f'a{indx}': {
                ZONENAME: ZONENAME[i],
                DESCRIPTION: "description",
                EXAMINATION: "examine",
                SOLVED: False,
                UP: "You cannot move up from here",
                DOWN: game_locs[i + 4],
                LEFT: game_locs[i - 1],
                RIGHT: game_locs[i + 1]}
            })
    elif x[0] == 'b':
        if x[1] == '1':
            zonemap.update({'b1': {
                ZONENAME: ZONENAME[i],
                DESCRIPTION: "description",
                EXAMINATION: "examine",
                SOLVED: False,
                UP: game_locs[i - 4],
                DOWN: game_locs[i + 4],
                LEFT: "You cannot move left from here",
                RIGHT: game_locs[i + 1]}
            })
        elif x[1] == '4':
            zonemap.update({'b4': {
                ZONENAME: ZONENAME[i],
                DESCRIPTION: "description",
                EXAMINATION: "examine",
                SOLVED: False,
                UP: game_locs[i - 4],
                DOWN: game_locs[i + 4],
                LEFT: game_locs[i - 1],
                RIGHT: "You cannot move right from here"}
            })
        else:
            zonemap.update({f'b{indx}': {
                ZONENAME: ZONENAME[i],
                DESCRIPTION: "description",
                EXAMINATION: "examine",
                SOLVED: False,
                UP: game_locs[i - 4],
                DOWN: game_locs[i + 4],
                LEFT: game_locs[i - 1],
                RIGHT: game_locs[i + 1]}
            })
这是什么原因?”a1'显然是一个字符串,键是一个字典而不是一个列表,那么我出现这个错误的原因是什么?我正在使用PyCharm测试代码,并使用Python 3.8。字典绝对是可以散列的,对吗?所以我不明白为什么会这样。上下文:基于txt的RPG游戏

错误给出了错误的大致位置,但由于它是一个多行语句,因此错误实际上位于嵌套目录的下一行。
ZONENAME
是一个列表,列表不能用作键

要解决此问题,请不要将常量用作键。将其名称用作键:引用名称

zonemap.update({'a1': {
    ZONENAME: ZONENAME[i],
    ...
})
ZONENAME = ['Town Market', 'Town Entrance', 'Town Square', 'Town Hall', "", 'Home', "", "", ""]
zonemap.update({'a1': {
    ZONENAME: ZONENAME[i],
    ...
})
zonemap.update({'a1': {
    'ZONENAME': ZONENAME[i],
    'DESCRIPTION': "description",
    'EXAMINATION': "examine",
    'SOLVED': False,
    'UP': "You cannot move up from here",
    'DOWN': game_locs[i + 4],
    'LEFT': "You cannot move left from here",
    'RIGHT': game_locs[i + 1]
}})