gpt4 book ai didi

python - 将具有父项的对象字典转换为具有子项的嵌套字典

转载 作者:太空宇宙 更新时间:2023-11-03 15:01:06 25 4
gpt4 key购买 nike

我有一个具有父子关系的实体字典,是在解析文件中每个实体的父级后获得的。我最终得到了一个具有以下结构的字典,其中每个元素都有其所有父元素的完整列表。示例字典:

data_dict = {
'1388004': {'content': '13',
'parents': ['1280', '1279', '90964', '1385', '91061', '1239', '1783272', '2', '131567', '1'],
'name': 'foo'},
'1895753': {'content': '11',
'parents': ['46913', '45401', '356', '28211', '1224', '2', '131567', '1'],
'name': 'bar'},
'642227': {'content': '11',
'parents': ['82986', '1903409', '91347', '1236', '1224', '2', '131567', '1'],
'name': 'baz'},
'89373': {'content': '27',
'parents': ['768507', '768503', '976', '68336', '1783270', '2', '131567', '1'],
'name': 'zab'},
'81406': {'content': '21',
'parents': ['872', '194924', '213115', '28221', '68525', '1224', '2', '131567', '1'],
'name': 'oof'},
'796027': {'content': '12',
'parents': ['410829', '410830', '4892', '4891', '147537', '716545', '4890', '451864', '4751', '33154', '2759', '131567', '1'],
'name': 'ofo'},
'589342': {'content': '16',
'parents': ['3027', '2759', '131567', '1'],
'name': 'raz'}
}

parents 列表以相反顺序表示给定实体的所有父级。这意味着对于 589342,层次结构如下:1(我的树的根)包含 131567,其中包含 2759 ,包含 3027,其本身包含 589342

我需要的输出是所有实体及其子级的列表或字典(不是像我目前拥有的父级),并且理想情况下看起来像这样(让我们忽略内容name 字段(目前):

{'id': '1', 'children':[{
'id':'131567', 'children':[
{'id':'2759', 'children':[...]},
{'id':'2', 'children':[...]}
]
},
...
]
}

欢迎任何关于如何实现这一目标的想法!如果您需要更多信息,请告诉我。

最佳答案

首先,将您的 data_dict 转换为“ anchor ”列表:

parents = [[k] + v["parents"] for k, v in data_dict.items()]

然后,您可以以相反的顺序迭代这些列表,并相应地将新条目添加到字典中:

root = {}
for hierarchy in parents:
current = root
for node in reversed(hierarchy):
current = current.setdefault(node, {})

结果格式有点不同...

{'1': {'131567': {'2': {'1224': {'1236': {'91347': {'1903409': {'82986': {'642227': {}}}}},
'28211': {'356': {'45401': {'46913': {'1895753': {}}}}},
'68525': {'28221': {'213115': {'194924': {'872': {'81406': {}}}}}}},
'1783270': {'68336': {'976': {'768503': {'768507': {'89373': {}}}}}},
'1783272': {'1239': {'91061': {'1385': {'90964': {'1279': {'1280': {'1388004': {}}}}}}}}},
'2759': {'3027': {'589342': {}},
'33154': {'4751': {'451864': {'4890': {'716545': {'147537': {'4891': {'4892': {'410830': {'410829': {'796027': {}}}}}}}}}}}}}}}

...但之后应该很容易翻译,例如像这样:

def translate(d):
return [{"id": k, "children": translate(v)} for k, v in d.items()]

关于python - 将具有父项的对象字典转换为具有子项的嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45099634/

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