繁体   English   中英

获取嵌套python字典中的所有键组合

[英]get all keys combination in nested python dictionary

我是python的新手..试图获得所有的组合键..假设我有字典d。

d = {'edge': {'edge1': {'interface': {'interface1': {'ip': 10, 'name': 'uplink-to-x'}}, 'name': 'x'}, 'edge2': {'interface': {'interface1': {'ip': 20, 'name': 'uplink-to-y'}}, 'name': 'y'}}}

需要输出为:

edge["edge1"]["name"]
edge["edge1"]["interface"]["interface1"]["name"]
edge["edge1"]["interface"]["interface1"]["ip"]
edge["edge2"]["name"]
edge["edge2"]["interface"]["interface1"]["name"]
edge["edge2"]["interface"]["interface1"]["ip"]

请帮忙..

您可以像这样遍历叶元素:

Python3 代码

d = {'edge': {'edge1': {'interface': {'interface1': {'ip': 10, 'name': 'uplink-to-x'}}, 'name': 'x'}, 'edge2': {'interface': {'interface1': {'ip': 20, 'name': 'uplink-to-y'}}, 'name': 'y'}}}
def nested_print(d):
    for key in d:
        if isinstance(d[key],dict):
            nested_print(d[key])
        else:
            print(key,d[key])
nested_print(d)

输出

ip 20
name uplink-to-y
name y
ip 10
name uplink-to-x
name x

注意:我在给定的字典中没有找到任何元素作为edge["edge1"]["name"]

isinstance内置函数的文档可以在这里找到: https : //docs.python.org/3/library/functions.html#isinstance

因为我找不到将嵌套字典键转换为元组列表的现成函数,所以我写了这个。 只需很少的努力,它就可以转换为纯文本:

def to_tuples(dict_, result_list=None, in_line_list=None):
    """convert from nested dictionaty to list of tuples"""
    is_return_list = True if result_list is None else False
    if is_return_list:
        result_list = []
    is_create_new = True if in_line_list is None else False
    for k, v in dict_.items():
        if is_create_new:
            in_line_list = []
        out_line_list = copy.deepcopy(in_line_list)
        out_line_list.append(k)
        if not isinstance(v, dict) or len(v) == 0:
            result_list.append(tuple(out_line_list))
        else:
            to_tuples(dict_[k], result_list, out_line_list)
    if is_return_list:
        return result_list


d = {
    "edge": {
        "edge1": {"interface": {"interface1": {"ip": 10, "name": "uplink-to-x"}}, "name": "x"},
        "edge2": {"interface": {"interface1": {"ip": 20, "name": "uplink-to-y"}}, "name": "y                                            "},
    }
}


for x in to_tuples(d):
    a = [f"""["{key}"]""" for key in x]
    print("edge" + "".join(a))

将打印:

edge["edge"]["edge1"]["interface"]["interface1"]["ip"]
edge["edge"]["edge1"]["interface"]["interface1"]["name"]
edge["edge"]["edge1"]["name"]
edge["edge"]["edge2"]["interface"]["interface1"]["ip"]
edge["edge"]["edge2"]["interface"]["interface1"]["name"]
edge["edge"]["edge2"]["name"]

暂无
暂无

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

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