私はあなたが遺伝子プールに戻って下降し、リストをそれらをオフにバンプすることができますなど、トリックは、現在の親のリストに祖父母を祖先を追跡することだと思います。私はあなたが削除することができ、いくつかのデバッグプリントを持っているが、それは私はアルゴリズムが進行した方法を見て助けました。私はトップレベルのフォルダを扱う仮想ルート ""を作成しました。あなたはそれを表示したくない場合は、「」でも、何にその名前を変更することができます。
folders = [{
"NAME": " Folder 1",
"ID": "869276"
}, {
"ID": "869277",
"NAME": "- Sub-folder 1"
}, {
"ID": "869279",
"NAME": "-- Sub-sub-folder 1"
}, {
"NAME": "--- Sub-sub-folder 1 2",
"ID": "869285"
}, {
"NAME": "--- Sub-sub-folder 1 3",
"ID": "869286"
}, {
"NAME": "-- Sub-sub-folder 2",
"ID": "869280"
}, {
"ID": "869281",
"NAME": " Folder 2"
}, {
"ID": "869282",
"NAME": "- Sub-folder 2"
}, {
"NAME": "- Sub-folder 2 1",
"ID": "869283"
}, {
"NAME": "-- Sub-Sub-folder 2 1",
"ID": "869284"
}]
# id to folder index (with virtual root) for printing
folders_by_id = {folder['ID']:folder for folder in folders}
folders_by_id['<root>'] = {'NAME':'<root>', 'ID':-1}
# current ancestors stack
parents = ['<root>']
for folder in folders:
depth = folder['NAME'].split(' ')[0].count('-') + 1 # w/ virtual root
print('state', 'parents', [folders_by_id[_id] for _id in parents], 'name', folder['NAME'], 'depth', depth)
while depth < len(parents):
old = parents.pop()
print('removing', old)
folder['PARENT'] = parents[-1]
parents.append(folder['ID'])
print()
print('++++++++++++++++++++++++++++++ showing parents +++++++++++++++++++++++++++++++')
for folder in folders:
parent = folders_by_id[folder['PARENT']]
print('{padding}{parent} ({p_id}) --> {child} ({c_id})'.format(
padding=' ' * parent['NAME'].count('-'), parent=parent['NAME'],
p_id= parent['ID'], child=folder['NAME'], c_id=folder['ID']))
出力:
state parents [{'ID': -1, 'NAME': '<root>'}] name Folder 1 depth 1
state parents [{'ID': -1, 'NAME': '<root>'}, {'ID': '869276', 'NAME': ' Folder 1', 'PARENT': '<root>'}] name - Sub-folder 1 depth 2
state parents [{'ID': -1, 'NAME': '<root>'}, {'ID': '869276', 'NAME': ' Folder 1', 'PARENT': '<root>'}, {'ID': '869277', 'NAME': '- Sub-folder 1', 'PARENT': '869276'}] name -- Sub-sub-folder 1 depth 3
state parents [{'ID': -1, 'NAME': '<root>'}, {'ID': '869276', 'NAME': ' Folder 1', 'PARENT': '<root>'}, {'ID': '869277', 'NAME': '- Sub-folder 1', 'PARENT': '869276'}, {'ID': '869279', 'NAME': '-- Sub-sub-folder 1', 'PARENT': '869277'}] name --- Sub-sub-folder 1 2 depth 4
state parents [{'ID': -1, 'NAME': '<root>'}, {'ID': '869276', 'NAME': ' Folder 1', 'PARENT': '<root>'}, {'ID': '869277', 'NAME': '- Sub-folder 1', 'PARENT': '869276'}, {'ID': '869279', 'NAME': '-- Sub-sub-folder 1', 'PARENT': '869277'}, {'ID': '869285', 'NAME': '--- Sub-sub-folder 1 2', 'PARENT': '869279'}] name --- Sub-sub-folder 1 3 depth 4
removing 869285
state parents [{'ID': -1, 'NAME': '<root>'}, {'ID': '869276', 'NAME': ' Folder 1', 'PARENT': '<root>'}, {'ID': '869277', 'NAME': '- Sub-folder 1', 'PARENT': '869276'}, {'ID': '869279', 'NAME': '-- Sub-sub-folder 1', 'PARENT': '869277'}, {'ID': '869286', 'NAME': '--- Sub-sub-folder 1 3', 'PARENT': '869279'}] name -- Sub-sub-folder 2 depth 3
removing 869286
removing 869279
state parents [{'ID': -1, 'NAME': '<root>'}, {'ID': '869276', 'NAME': ' Folder 1', 'PARENT': '<root>'}, {'ID': '869277', 'NAME': '- Sub-folder 1', 'PARENT': '869276'}, {'ID': '869280', 'NAME': '-- Sub-sub-folder 2', 'PARENT': '869277'}] name Folder 2 depth 1
removing 869280
removing 869277
removing 869276
state parents [{'ID': -1, 'NAME': '<root>'}, {'ID': '869281', 'NAME': ' Folder 2', 'PARENT': '<root>'}] name - Sub-folder 2 depth 2
state parents [{'ID': -1, 'NAME': '<root>'}, {'ID': '869281', 'NAME': ' Folder 2', 'PARENT': '<root>'}, {'ID': '869282', 'NAME': '- Sub-folder 2', 'PARENT': '869281'}] name - Sub-folder 2 1 depth 2
removing 869282
state parents [{'ID': -1, 'NAME': '<root>'}, {'ID': '869281', 'NAME': ' Folder 2', 'PARENT': '<root>'}, {'ID': '869283', 'NAME': '- Sub-folder 2 1', 'PARENT': '869281'}] name -- Sub-Sub-folder 2 1 depth 3
++++++++++++++++++++++++++++++ showing parents +++++++++++++++++++++++++++++++
<root> (-1) --> Folder 1 (869276)
Folder 1 (869276) --> - Sub-folder 1 (869277)
- Sub-folder 1 (869277) --> -- Sub-sub-folder 1 (869279)
-- Sub-sub-folder 1 (869279) --> --- Sub-sub-folder 1 2 (869285)
-- Sub-sub-folder 1 (869279) --> --- Sub-sub-folder 1 3 (869286)
- Sub-folder 1 (869277) --> -- Sub-sub-folder 2 (869280)
<root> (-1) --> Folder 2 (869281)
Folder 2 (869281) --> - Sub-folder 2 (869282)
Folder 2 (869281) --> - Sub-folder 2 1 (869283)
- Sub-folder 2 1 (869283) --> -- Sub-Sub-folder 2 1 (869284)
ヒュム私は私はあなたを理解していないと思うようになった。親の値は、** **サブサブフォルダ1のために何をすべきですか? JSONの構造がより明確であるなしに – PyNEwbie
869277は、申し訳ありませんフォルダ名は、実際に木を見て、混乱しています – Hyperion