父/子元素的数字文本列表

时间:2017-06-29 07:49:10

标签: algorithm list parent hierarchy children

我的文本文件如下所示:

1. Apple
1.1. Apricot
1.2. Avocado
1.2.1. Banana
1.2.1.2. Blackberry
1.2.2. Boysenberry
1.3. Cherry
1.4. Dragonfruit
1.5. Plantain
1.5.1. Pear
1.5.1.1. Pomelo

等等。

我需要来自这个简单文本输入的带子/父元素的层次结构数组。

我坚持这一点,需要帮助。

1 个答案:

答案 0 :(得分:0)

您可以将层次结构表示为python中的词典列表。列表是这样的:

[{'id': '1', 'parent': '0', 'name': 'Apple'},
{'id': '1.1', 'parent': '1', 'name': 'Apricot'},
{'id': '1.2', 'parent': '1', 'name': 'Avocado'},
{'id': '1.2.1', 'parent': '1.2', 'name': 'Banana'},
{'id': '1.2.1.2', 'parent': '1.2.1', 'name': 'Blackberry'},
{'id': '1.2.2', 'parent': '1.2', 'name': 'Boysenberry'},
{'id': '1.3', 'parent': '1', 'name': 'Cherry'},
{'id': '1.4', 'parent': '1', 'name': 'Dragonfruit'},
{'id': '1.5', 'parent': '1', 'name': 'Plantain'},
{'id': '1.5.1', 'parent': '1.5', 'name': 'Pear'},
{'id': '1.5.1.1', 'parent': '1.5.1', 'name': 'Pomelo'}]

这里,列表中的每个字典代表文本文件中的每一行。该行包含id,其父级和关联名称。

重现字典列表的代码(Stack.txt包含问题中的文本文件):

res = []

with open("Stack.txt","r") as fin:
    for line in fin:
        var = str(line)
        var = var.rstrip('\n')
        var = var.split(' ')
        dic = {}
        if var[0] == "1.":
            dic["parent"] = "0"
            dic["id"] = "1"
            dic["name"] = var[1]
            res.append(dic)
        else:
            temp = var[0][:-1]
            id =  temp[-1]
            parent = temp[:-2]
            id = parent + "." + id
            dic["parent"] = parent
            dic["id"] = id
            dic["name"] = var[1]
            res.append(dic)

fin.close()
for x in res:
    print x