将图边列表转换为 JSON 树
Convert list of graph edges to JSON tree
我有一个元组列表,边从 networkx
保证是树状的:
[('king', 'governor'),
('governor', 'editor'),
('king', 'state'),
('state', 'collapse'),
('collapse', 'coverage'),
('collapse', 'author'),
('collapse', 'opening'),
('state', 'head'),
('state', 'lord')]
这些按深度优先搜索顺序排序,但如果这样更容易,也可以很容易地按广度优先顺序排序。
我正在寻找一种方法将此边列表转换为 JSON 对象。前面的示例将变为:
{'king': [{'governor': [{'editor': []}]},
{'state': [{'collapse': [{'coverage': []},
{'author': []},
{'opening': []}]},
{'head': []},
{'lord': []}]
}]
}
叶节点是应该像示例输出中那样表示为字典,还是简单地表示为字符串,由您决定。如果使用 networkx.DiGraph
比它的边列表有更简单的方法来做到这一点,那也同样有效。
感谢任何帮助。
import json
data = [('king', 'governor'),
('governor', 'editor'),
('king', 'state'),
('state', 'collapse'),
('collapse', 'coverage'),
('collapse', 'author'),
('collapse', 'opening'),
('state', 'head'),
('state', 'lord')];
root = data[0][0]
node2chilren = {root: []}
for parent, child in data:
childnode = {child: []}
children = node2chilren[parent]
children.append(childnode)
node2chilren[child] = childnode[child]
jsonstr = json.dumps({root: node2chilren[root]}, indent=4)
print jsonstr
产出
{
"king": [
{
"governor": [
{
"editor": []
}
]
},
{
"state": [
{
"collapse": [
{
"coverage": []
},
{
"author": []
},
{
"opening": []
}
]
},
{
"head": []
},
{
"lord": []
}
]
}
]
}
我有一个元组列表,边从 networkx
保证是树状的:
[('king', 'governor'),
('governor', 'editor'),
('king', 'state'),
('state', 'collapse'),
('collapse', 'coverage'),
('collapse', 'author'),
('collapse', 'opening'),
('state', 'head'),
('state', 'lord')]
这些按深度优先搜索顺序排序,但如果这样更容易,也可以很容易地按广度优先顺序排序。
我正在寻找一种方法将此边列表转换为 JSON 对象。前面的示例将变为:
{'king': [{'governor': [{'editor': []}]},
{'state': [{'collapse': [{'coverage': []},
{'author': []},
{'opening': []}]},
{'head': []},
{'lord': []}]
}]
}
叶节点是应该像示例输出中那样表示为字典,还是简单地表示为字符串,由您决定。如果使用 networkx.DiGraph
比它的边列表有更简单的方法来做到这一点,那也同样有效。
感谢任何帮助。
import json
data = [('king', 'governor'),
('governor', 'editor'),
('king', 'state'),
('state', 'collapse'),
('collapse', 'coverage'),
('collapse', 'author'),
('collapse', 'opening'),
('state', 'head'),
('state', 'lord')];
root = data[0][0]
node2chilren = {root: []}
for parent, child in data:
childnode = {child: []}
children = node2chilren[parent]
children.append(childnode)
node2chilren[child] = childnode[child]
jsonstr = json.dumps({root: node2chilren[root]}, indent=4)
print jsonstr
产出
{
"king": [
{
"governor": [
{
"editor": []
}
]
},
{
"state": [
{
"collapse": [
{
"coverage": []
},
{
"author": []
},
{
"opening": []
}
]
},
{
"head": []
},
{
"lord": []
}
]
}
]
}