从标识符构建json树结构

时间:2012-06-10 15:09:49

标签: python json tree identifier

我有一个包含以下数据的文件:

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的事实但我看不到构建我想要的结构的方法。

我会感谢任何帮助,伪代码或任何其他编程语言。

2 个答案:

答案 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))

谢谢!