gpt4 book ai didi

python - 列表到嵌套字典

转载 作者:太空宇宙 更新时间:2023-11-04 05:24:34 25 4
gpt4 key购买 nike

我有像

这样的关卡列表
levels = [["A", "B", "C", "D"], ["A", "B"], ["A", "B", "X"]]

作为响应,嵌套字典应该如下所示

    {
"name": "A",
"parent": -1,
"children": [
{
"name": "B",
"parent": "A",
"children": [
{
"name": "C",
"parent": "B",
"children": [
{
"name": "D",
"parent": "C",
}
],

},
{
"name": "X",
"parent": "B"
}
],

}
]
}

我知道我在递归循环中遗漏了一些东西。

到目前为止这是我的代码

import csv
import json

class AutoVivification(dict):
"""Implementation of perl's autovivification feature."""
def __getitem__(self, item):
try:
return dict.__getitem__(self, item)
except KeyError:
value = self[item] = type(self)()
return value

def master_tree(data, payload, parent = -1):
if len(data) == 1:
if data[0] not in payload['name']:
payload = {'name':data[0], "parent": parent}
else:
if data[0] in payload['name']:
for k in payload['children']:
master_tree(data[1:], k, data[0])
else:
payload = {'name': data[1], "parent": data[0], 'children':[master_tree(data[1:], payload, data[0])]}

return payload


payload = AutoVivification()
payload = master_tree(["A", "B", "X"], payload)
payload = master_tree(["A", "B", "C", "D"], payload)

print json.dumps(payload, indent=4)

重复相同的结构时会出现问题。就像 A->B->C->D 已经从第一次迭代中出现,当 A->B 再次传递时,理想情况下应该跳过它,在最后一种情况下,它应该只在 B 下添加 X 节点

最佳答案

import csv
import json

class AutoVivification(dict):
"""Implementation of perl's autovivification feature."""
def __getitem__(self, item):
try:
return dict.__getitem__(self, item)
except KeyError:
value = self[item] = type(self)()
return value

def master_tree(data, payload, parent = -1):
if len(data) == 1:
if data[0] not in payload['name']:
payload = {'name':data[0], "parent": parent}
else:
if 'name' in payload and data[0] in payload['name']:
get_list = []
for k in payload['children']:
get_list.append(k['name'])
if data[1] in get_list:
master_tree(data[1:], k, data[0])
else:
payload['children'].append(master_tree(data[1:], {'name':data[0], "parent": parent}, data[0]))

else:
payload = {'name': data[0], "parent": parent, 'children':[master_tree(data[1:], payload, data[0])]}

return payload


payload = AutoVivification()
payload = master_tree(["A", "B", "X"], payload)
payload = master_tree(["A", "B", "C", "D"], payload)
payload = master_tree(["A", "B", "Q"], payload)


print json.dumps(payload, indent=4)

关于python - 列表到嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39246906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com