<p>下面是一个使用itertools的递归解决方案。我不知道这对你来说是否足够有效,但它确实有效。它的工作原理是将字符串列表转换为列表列表,然后使用相同的第一个键将其划分为列表,然后构建dict并在删除第一个键的情况下重复</p>
<pre><code>from itertools import groupby
from pprint import pprint
data = ['a-ab-aba-abaa-abaaa', 'a-ab-aba-abab', 'a-ac-aca-acaa', 'a-ac-aca-acab']
components = [x.split("-") for x in data]
def build_dict(component_list):
key = lambda x: x[0]
component_list = sorted(component_list, key=key)
# divide into lists with the same fist key
sublists = groupby(component_list, key)
result = []
for name, values in sublists:
value = {}
value["title"] = name
value["children"] = build_dict([x[1:] for x in values if x[1:]])
result.append(value)
return result
pprint(build_dict(components))
</code></pre>
<p>输出:</p>
<pre><code>[{'children': [{'children': [{'children': [{'children': [{'children': [],
'title': 'abaaa'}],
'title': 'abaa'},
{'children': [], 'title': 'abab'}],
'title': 'aba'}],
'title': 'ab'},
{'children': [{'children': [{'children': [], 'title': 'acaa'},
{'children': [], 'title': 'acab'}],
'title': 'aca'}],
'title': 'ac'}],
'title': 'a'}]
</code></pre>
<p>要将此dict转换为json,可以使用json模块中的<code>json.dumps</code>。我希望我的解释清楚</p>