1

私はそのようなデータを含むファイルを持っています:

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}, {...} ]

リーフIDに彼の親IDが含まれているという事実を利用できると思いますが、必要な構造を構築する方法がわかりません。

擬似コードやその他のプログラミング言語での助けをいただければ幸いです。

4

2 に答える 2

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)
于 2012-06-10T15:19:27.643 に答える
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))

ありがとう !

于 2012-07-25T08:14:16.363 に答える