给定一个嵌套列表,我们希望将其转换为字典,该字典的元素可以视为树数据结构的一部分。在本文中,我们将看到将嵌套列表转换成添加字典的两种方法,字典的元素表示像数据结构的树。
我们通过切片来反转列表中的项目,然后检查列表中是否存在该项目。如果不存在,则忽略它,否则将其添加到树中。
def CreateTree(lst): new_tree = {} for list_item in lst: currTree = new_tree for key in list_item[::-1]: if key not in currTree: currTree[key] = {} currTree = currTree[key] return new_tree # 给定列表 listA = [['X'], ['Y', 'X'], ['Z', 'X'], ['P', 'Z', 'X']] print(CreateTree(listA))
运行上面的代码给我们以下结果-
输出结果
{'X': {'Y': {}, 'Z': {'P': {}}}}
我们使用functools和operator模块来获取reduce和getitem函数。使用这些函数,我们定义了两个函数以从列表中获取项目并将这些项目设置为树形结构。在这里,我们还使用切片方法来反转列表的元素,然后应用两个创建的函数来创建其元素为树形结构的字典。
from functools import reduce from operator import getitem def getTree(tree, mappings): return reduce(getitem, mappings, tree) def setTree(tree, mappings): getTree(tree, mappings[:-1])[mappings[-1]] = dict() # 给定列表 lst = [['X'], ['Y', 'X'], ['Z', 'X'], ['P', 'Z', 'X']] tree = {} for i in lst: setTree(tree, i[::-1]) print(tree)
运行上面的代码给我们以下结果-
输出结果
{'X': {'Y': {}, 'Z': {'P': {}}}}