在 Python 中访问嵌套键

Kar*_*zov 3 python dictionary nested

我有一个嵌套字典如下

entry = {
    0: {"Q": 0},
    1: {"W": 2, "E": 3, "N": 5, "S": 4, "Q": 0},
    2: {
        "N": {
            "Q": {"E"}
        }
    },
}
Run Code Online (Sandbox Code Playgroud)

当我尝试仅访问 key 的密钥时1,我得到以下信息:

>>> print(entry[1].keys())
dict_keys(['W', 'E', 'N', 'S', 'Q'])
Run Code Online (Sandbox Code Playgroud)

但是对于键 2,它只返回顶部键而不是嵌套键。

>>> print(entry[2].keys())
dict_keys(['N'])  
Run Code Online (Sandbox Code Playgroud)

为什么不返回字典的嵌套键?

A-y*_*A-y 5

keys()不能那样工作。

键()

返回字典键的新视图

您的嵌套字典是一个完全独立的字典,您可以使用自己的keys()方法获取自己的键:

entry[2]['N'].keys()
Run Code Online (Sandbox Code Playgroud)

如果要递归获取嵌套字典中的所有键,则必须为此实现一个方法:

entry = {0: {"Q": 0},
         1: {"W": 2, "E": 3, "N": 5, "S": 4, "Q": 0},
         2: {"N": { "Q":{"E"}}},
}


def rec_keys(dictio):
    keys = []
    for (key,value) in dictio.items():
        if isinstance(value, dict):
            keys.extend(rec_keys(value))
        else:
            keys.append(key)
    return keys

print(rec_keys(entry))
# ['Q', 'Q', 'W', 'N', 'S', 'E', 'Q']
Run Code Online (Sandbox Code Playgroud)