python - 从嵌套字典生成边缘列表
问题描述
下面是作为字典的树:
output_dict = { 'Sort': [ { 'Aggregate': [ { 'Hash Join': [{ 'Hash Join': [ { 'Sequential Scan': [ ] }, { 'Hash': [ { 'Sequential Scan': [ ] } ] } ] },{ 'Hash': [ { 'Sequential Scan': [ ] } ] } ] } ] } ] }
我想将上述数据转换为 networkx 兼容格式。最好采用边缘列表格式。
IE
('Sort', 'Aggregrate')
('Aggregrate', 'Hash Join'))
我尝试使用 BFS 模板,但没有成功感谢任何帮助,谢谢
解决方案
您可以使用递归生成器函数:
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')]
推荐阅读
- libreoffice-calc - Ubound(Array()) 无法使用 .getDataArray() 方法知道数组中有多少元素
- e-commerce - 如何扩展 Shopware 6 搜索,以便按自定义字段、制造商名称、产品 ID 等进行搜索?
- swift - 围绕 3rd 方 SDK 编写组合包装器
- azure - 我可以在云中创建 Azure AD 用户帐户,然后同步到本地 Azure 吗?
- python - 如何在 Django 中创建对等组?
- reactjs - 在 src 文件夹上运行 npm install 后,它显示未找到存储库
- asp.net - 为什么授权属性策略参数仅限于 const?
- bash - tmp 中超过 90 天的目录 | root 权限被拒绝 | 读写的所有问号| 用户可以看到 root 拥有 dir
- javascript - 将 onChange 处理程序添加到 svelte 中的输入
- javascript - 如何使用 new Map() 设置地图的初始值?