从python 3.X中的深层嵌套字典打印特定键和值

JHC*_*Tac 11 python python-3.x

我是python的新手,我试图搜索,但似乎可以找到我想要完成的样本.任何想法都非常感谢.我正在使用嵌套字典,其中包含许多键和值,但我只想使用过滤列表变量打印特定字典.

my_nested_dict = {"global": {"peers": {"15.1.1.1": {"remote_id": "15.1.1.1", "address_family": {"ipv4": {"sent_prefixes": 1, "received_prefixes": 4, "accepted_prefixes": 4}}, "remote_as": 65002, "uptime": 13002, "is_enabled": true, "is_up": true, "description": "== R3 BGP Neighbor ==", "local_as": 65002}}, "router_id": "15.1.1.2"}}
Run Code Online (Sandbox Code Playgroud)

我想过滤它并选择要打印的键和值

filtered_list = ['peers', 'remote_id', 'remote_as', 'uptime']
Run Code Online (Sandbox Code Playgroud)

并实现了一个

peers: 15.1.1.1
remote_id: 15.1.1.1
remote_as: 65002
uptime: 13002
Run Code Online (Sandbox Code Playgroud)

Jac*_*IRR 14

使用递归和isinstance:

my_nested_dict = {"global": {"peers": {"15.1.1.1": {"remote_id": "15.1.1.1", "address_family": {"ipv4": {"sent_prefixes": 1, "received_prefixes": 4, "accepted_prefixes": 4}}, "remote_as": 65002, "uptime": 13002, "is_enabled": True, "is_up": True, "description": "== R3 BGP Neighbor ==", "local_as": 65002}}, "router_id": "15.1.1.2"}}

filtered_list = ['peers', 'remote_id', 'remote_as', 'uptime']

def seek_keys(d, key_list):
    for k, v in d.items():
        if k in key_list:
            if isinstance(v, dict):
                print(k + ": " + list(v.keys())[0])
            else:
                print(k + ": " + str(v))
        if isinstance(v, dict):
            seek_keys(v, key_list)

seek_keys(my_nested_dict, filtered_list)
Run Code Online (Sandbox Code Playgroud)

注意:这里有一个内置的假设,如果你想要一个值为另一个字典的键的"值",你就得到第一个键.