Algorithm Python-从输入数据生成分层字典(树)
这似乎与尝试有一定关系,我能够在python中使用输入生成trie。您可以使用递归,并创建深度限制来确定何时开始将新节点收集到单个列表中:Algorithm Python-从输入数据生成分层字典(树),algorithm,Algorithm,这似乎与尝试有一定关系,我能够在python中使用输入生成trie。您可以使用递归,并创建深度限制来确定何时开始将新节点收集到单个列表中: Input data = [1,12,122,14] . Output data = { "1": { "children": [ { "12": { "children": [ {
Input data = [1,12,122,14] .
Output data =
{
"1": {
"children": [
{
"12": {
"children": [
{
"122": {
"children": []
}
}
]
}
},
{
"14": {
"children": []
}
}
]
}
}
输出:
def trie(d, current = 0, depth = 2):
if len(d) == len(data):
return {d[0]:{'children':filter(None, [trie(d[1:]), {d[-1]:{'children':[]}}])}}
if current == depth:
return [{i:{'children':[]}} for i in d]
return {d[0]:{'children':trie(d[1:], current+1)}}
new_data = [[1,12,122,14], [1,12,122,123,14], [1,14,16,12,122,123]]
new_list = [trie(sorted(i, key=lambda x:str(x))) for i in new_data]
你能写下问题是什么吗?这有点像一个没有尝试的trie。你的问题是什么?您正在尝试生成前缀树吗?你写了什么代码?输出数据是在您当前获取的数据之上还是在您想要获取的数据之上?您能展示一下您的尝试吗?通常,树和递归函数可以很好地协同工作。此外,子项可能不应该是dict的列表…嗨,对于输入=[1,12122123,14],输出是预期的o/p是@ajax1234首先激活数组我们必须按字典顺序对其排序->数据=[1,14,16,12122123]数据=排序数据,key=lambda x:strx,然后继续以分层格式输入@Ajax1234@iajnr请看我最近的编辑。我创建了一个单独的列表,将每个测试列表作为元素,并在每个列表上调用trie。感谢您的解决方案,但是12应该与14和16平行,但是14和16被列为12的子项@AJAX1234也给定输入=[1,3]输出应为@Ajax1234
[{1: {'children': {12: {'children': [{122: {'children': []}}, {14: {'children': []}}]}}}}, {1: {'children': {12: {'children': [{122: {'children': []}}, {123: {'children': []}}, {14: {'children': []}}]}}}}, {1: {'children': [{12: {'children': {122: {'children': [{123: {'children': []}}, {14: {'children': []}}, {16: {'children': []}}]}}}}, {16: {'children': []}}]}}]