if 语句调整多个字典键值,即使语句只指定一个键

if-statement adjusts multiple dictionary key values even though statement only specifies one key

所以我正在制作一个基于文本的角色扮演游戏作为个人项目。我有一本字典,它用嵌套字典映射出游戏位置 - 例如:

zonemap = {
    "a1": {ZONENAME: "somename", DESCRIPTION: "somedescription", SOLVED: False, SEARCHED: False},
    "a2": {ZONENAME: "somename", DESCRIPTION: "somedescription", SOLVED: False, SEARCHED: False},
    "c3": {ZONENAME: "somename", DESCRIPTION: "somedescription", SOLVED: False, SEARCHED: False}
    #so on for all game locations
    }

SOLVED 键存储一个布尔值,告诉我们该区域是否已完成。当调用下面的函数并更新 SEARCHED 键时,它也会更新 SOLVED 键。两个键的打印语句 return True 但它应该只更新 SEARCHED

def search_zone():
    if zonemap[myPlayer.location][SEARCHED] == False:
        zonemap[myPlayer.location][SEARCHED] = True #this line is the trouble maker
        for key in zonemap.keys():
            print('SOLVED', zonemap[key][SOLVED])
            print('SEARCHED', zonemap[key][SEARCHED])

为什么 zonemap[myPlayer.location][SEARCHED] = True 更新两个密钥?

我稍微更改了您的代码,以便于调试。但它似乎在这些测试条件下对我有用:

ZONENAME = "ZONENAME"
DESCRIPTION = "DESCRITPTION"
SOLVED = "SOLVED"
SEARCHED = "SEARCHED"


zonemap = {
    "a1": {ZONENAME: "somename", DESCRIPTION: "somedescription", SOLVED: False, SEARCHED: False},
    "a2": {ZONENAME: "somename", DESCRIPTION: "somedescription", SOLVED: False, SEARCHED: False},
    "c3": {ZONENAME: "somename", DESCRIPTION: "somedescription", SOLVED: False, SEARCHED: False}
    #so on for all game locations
    }

def search_zone(location):
    if zonemap[location][SEARCHED] == False:
        zonemap[location][SEARCHED] = True
        for key in zonemap.keys():
            print(f'SOLVED {key}', zonemap[key][SOLVED])
            print(f'SEARCHED {key}', zonemap[key][SEARCHED])

search_zone("a1")

输出:

SOLVED a1 False
SEARCHED a1 True
SOLVED a2 False
SEARCHED a2 False
SOLVED c3 False
SEARCHED c3 False

它只更新 SEARCHED 而不是 SOLVED