繁体   English   中英

如何在Python中从另一个字典打印键和从深度嵌套字典输出值

[英]How to print the keys from another dictionary and value from deep nested dict in Python

我的字典在下面,如何在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"}}
filtered_list = ['peers', 'remote_id', 'remote_as', 'uptime']
filtered_map_dict = {'peers':'pe', 'remote_id':'id', 'remote_as':'as', 'uptime':'up'}
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)

我的输出:

peers: 15.1.1.1
remote_id: 15.1.1.1
remote_as: 65002
uptime: 13002

预期产量:

pe: 15.1.1.1
id: 15.1.1.1
as: 65002
up: 13002

您需要打印filter_list[k]而不是简单的k 我写了一个示例代码,提供了预期的输出。

码:

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


seek_keys(my_nested_dict, filtered_list, filtered_map_dict)

输出:

>>> python3 test.py 
pe: 15.1.1.1
id: 15.1.1.1
as: 65002
as: 13002  # It should be "as" based on your filtered_map_dict. (Not "up" as you have written in your question.)

如果将filtered_map_dict更改为:

filtered_map_dict = {"peers": "pe", "remote_id": "id", "remote_as": "as", "uptime": "up"}

输出将恰好是您想要的,如下所示。

>>> python3 test.py 
pe: 15.1.1.1
id: 15.1.1.1
as: 65002
up: 13002

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM