您可以分析每个水果前的空格:
s = """
Apple
Bannana
Lemon
Juice
Drink
Watermelon
Red
Round
"""
import itertools, re
def group_data(vals):
if len(vals) == 1:
return {vals[0]:'Fruit', 'Children':None}
new_data = [list(b) for _, b in itertools.groupby(vals, key=lambda x:bool(re.findall('^\s', x)))]
new_group = [[new_data[i], new_data[i+1]] for i in range(0, len(new_data), 2)]
result = []
for a, b in new_group:
result.extend([{i:'Fruit', 'Children':None} for i in a[:-1]])
result.append({a[-1]:'Fruit', 'Children':group_data([re.sub('^\s{3}', '', c) for c in b])})
return result
_new_data = [i.strip('\n') for i in filter(None, s.split('\n'))]
import json
print(json.dumps(group_data(_new_data), indent=4))
输出:
[
{
"Apple": "Fruit",
"Children": [
{
"Bannana": "Fruit",
"Children": null
},
{
"Lemon": "Fruit",
"Children": [
{
"Juice": "Fruit",
"Children": [
{
"Drink": "Fruit",
"Children": {
"Watermelon": "Fruit",
"Children": null
}
}
]
},
{
"Red": "Fruit",
"Children": {
"Round": "Fruit",
"Children": null
}
}
]
}
]
}
]