首页 > 解决方案 > 从嵌套字典生成边缘列表

问题描述

下面是作为字典的树:

output_dict = { 'Sort': [ { 'Aggregate': [ { 'Hash Join': [{ 'Hash Join': [ { 'Sequential Scan': [ ] }, { 'Hash': [ { 'Sequential Scan': [ ] } ] } ] },{ 'Hash': [ { 'Sequential Scan': [ ] } ] } ] } ] } ] }

我想将上述数据转换为 networkx 兼容格式。最好采用边缘列表格式。

IE

('Sort', 'Aggregrate')
('Aggregrate', 'Hash Join'))

我尝试使用 BFS 模板,但没有成功感谢任何帮助,谢谢

标签: pythondictionarygraph

解决方案


您可以使用递归生成器函数:

output_dict = { 'Sort': [ { 'Aggregate': [ { 'Hash Join': [{ 'Hash Join': [ { 'Sequential Scan': [ ] }, { 'Hash': [ { 'Sequential Scan': [ ] } ] } ] },{ 'Hash': [ { 'Sequential Scan': [ ] } ] } ] } ] } ] }
def edges(d, p=None):
   for a, b in d.items():
      if p is not None: 
         yield (p,a)
      yield from (j for k in b for j in edges(k, p=a))

print(list(edges(output_dict)))

输出:

[('Sort', 'Aggregate'), ('Aggregate', 'Hash Join'), ('Hash Join', 'Hash Join'), ('Hash Join', 'Sequential Scan'), ('Hash Join', 'Hash'), ('Hash', 'Sequential Scan'), ('Hash Join', 'Hash'), ('Hash', 'Sequential Scan')]

推荐阅读