我有一个包含以下数据的文件:
ID attribute
1 'text'
101 'text'
1011 'text'
10111 'text'
1011101 'text'
1011102 'text'
1011103 'text'
1011104 'text'
1011130 'text'
我的目标是从这些数据构建json树结构:
{
[
ID : 1,
attribute : 'text',
children : [
ID: 101,
attribute : 'text',
children : [
...
ID : 2,
...
]
}
在python中,我建立了一个像这样的字典列表:
[ {'id': ID, 'attr' : text}, {...} ]
我想我可以使用leaf id包含他父母id的事实但我看不到构建我想要的结构的方法。
我会感谢任何帮助,伪代码或任何其他编程语言。
答案 0 :(得分:3)
我没有得到你的ID编号系统,所以这里是一个简单的前缀树的代码:
ls = """
1 'text'
101 'text'
1011 'text'
10111 'text'
1011101 'text'
2 two
2111 'text'
21114 'text'
25 'text'
2567 'text'
"""
ls = map(str.split, ls.strip().splitlines())
tree = [{'prefix': '', 'children':[]}]
stack = [tree[0]]
for id, attr in ls:
while not id.startswith(stack[-1]['prefix']):
stack.pop()
node = {'prefix': id, 'attr': attr, 'children': []}
stack[-1]['children'].append(node)
stack.append(node)
import pprint
pprint.pprint( tree)
答案 1 :(得分:0)
来自thg435的解决方案几乎没有变化:
# open & read raw file
f=open(args[0], 'r')
text = f.read()
#
text = map(lambda s: s.split(" ", 1), text.strip().replace("'","").splitlines())
tree = [{'prefix': '', 'children':[]}]
stack = [tree[0]]
for id, attr in text:
while not id.startswith(stack[-1]['prefix']):
stack.pop()
node = {'prefix': id, 'attr': attr, 'children': []}
stack[-1]['children'].append(node)
stack.append(node)
pprint.pprint( tree)
print json.dumps( tree)
f=open(args[1], 'w')
f.write(json.dumps( tree, sort_keys=True, indent=1))
谢谢!