Python 上具有嵌套字典深度的所有键

The*_*Kid 1 python dictionary nested

样本输入:

a = {
"key1": 1,
"key2": {
        "key3": 1,
        "key4": {
                "key5": 4
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

示例输出:

key1 1
key2 1
key3 2
key4 2
key5 3
Run Code Online (Sandbox Code Playgroud)

如何遍历此嵌套字典的每个元素并打印每个单独元素的深度?

Dan*_*ejo 8

使用递归:

def print_depth(d, start=0):
    for key, value in d.items():
        print(key, start + 1)
        if isinstance(value, dict):
            print_depth(value, start=start+1)


a = {
    "key1": 1,
    "key2": {
        "key3": 1,
        "key4": {
            "key5": 4
        }
    }
}

print_depth(a)
Run Code Online (Sandbox Code Playgroud)

输出

key1 1
key2 1
key3 2
key4 2
key5 3
Run Code Online (Sandbox Code Playgroud)

  • 我有完全相同的答案,但你抢先了我。:) (2认同)

Mak*_*cha 5

使用堆栈来避免超出递归限制(请参阅sys.getrecursionlimit):

def print_depth(d):
    stack = [(d, list(d.keys()))]
    while stack:
        cur, keys = stack.pop()
        while keys:
            k, keys = keys[0], keys[1:]
            print(k, len(stack) + 1)
            v = cur[k]
            if isinstance(v, dict):
                 stack.append((cur, keys))
                 stack.append((v, list(v.keys())))
                 break
Run Code Online (Sandbox Code Playgroud)

输出

key1 1
key2 1
key3 2
key4 2
key5 3
Run Code Online (Sandbox Code Playgroud)