Python如何从实体关系结构派生完整的层次结构
我有一个字典,其中包含几个表的实体关系,我需要一个包含完整的节点层次结构的列表Python如何从实体关系结构派生完整的层次结构,python,Python,我有一个字典,其中包含几个表的实体关系,我需要一个包含完整的节点层次结构的列表 { 'a': { 'b': ['key11', 'key21'], 'c': ['key12', 'key22'] }, 'b': { 'd': ['key13', 'key23'], 'e': ['key14', 'key24'] }, 'c': { 'f': ['key15', 'key25'] } } 在哪里- a、 b、c、d、e、f是表名
{
'a': {
'b': ['key11', 'key21'],
'c': ['key12', 'key22']
},
'b': {
'd': ['key13', 'key23'],
'e': ['key14', 'key24']
},
'c': {
'f': ['key15', 'key25']
}
}
在哪里-
- a、 b、c、d、e、f是表名
- a是父表,b和c是子表,相应的列表定义了两个表连接的键。e、 g.表a的键11与表b的键21相关
- 类似地,d和e是表b的子表,依此类推
[
['a', 'b', 'd']
['a', 'b', 'e']
['a', 'c', 'f']
]
我的解决方案是半生不熟的,我不知道如何继续下去
def connect_by_root(ele: str, er_data: dict, _tree: list = []) -> list:
"""
Identify dependent tables using recursion
"""
if ele in er_data:
if not _tree:
_tree.append(ele)
for k in er_data[ele].keys():
_tree.append(k)
return connect_by_root(k, er_data, _tree)
else:
return _tree
tree = connect_by_root('a', d, [])
不是一个优雅的,但它的作品,可以应用于任何级别的嵌套
def connect_by_root(ele: str, er_data: dict, lst: list = [], _tree=[], root=None) -> list:
"""
Identify dependent tables using recursion
"""
if root == None:
root = ele
if ele in er_data:
if not ele in lst:
lst.append(ele)
for k in er_data[ele].keys():
lst.append(k)
connect_by_root(k, er_data, lst, _tree, root)
if not isinstance(er_data[ele][k], dict):
if not lst in _tree:
if not root in lst:
lst.insert(0, root)
_tree.append(lst)
lst = [ele]
else:
lst = [ele]
return(_tree)
my_dict = {
'a': {
'b': ['key11', 'key21'],
'c': ['key12', 'key22']
},
'b': {
'd': ['key13', 'key23'],
'e': ['key14', 'key24']
},
'c': {
'f': ['key15', 'key25']
},
'f': {
'h': ['key16', 'key26']
}
}
tree = connect_by_root('a', my_dict, [], [])
print(tree)
结果:
[['a', 'b', 'd'], ['a', 'b', 'e'], ['a', 'c', 'f', 'h']]
这样就可以了。谢谢:)