获取嵌套python字典中的所有键组合
我是python新手。。尝试获取所有的键组合..假设我有字典d获取嵌套python字典中的所有键组合,python,dictionary,combinations,Python,Dictionary,Combinations,我是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
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
N.B.:在您给定的词典中,我没有找到任何元素作为edge[“edge1”][“name”]
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"]
请展示你的努力。