如何解决将节点列表转换为python中的嵌套字典 节点列表
我在 python 中有一个表示邻接列表的 dict 列表,我想将此列表转换为嵌套的 python dict。使用 name
和 children
键。
节点列表
这是一个字典列表的例子,它们是列表的前 10 个元素。原始包含 1000 个元素。
[{'id': 1,'name': 'External sector','parent_id': 0},{'id': 3,'name': 'Capital and financial markets',{'id': 77,'name': 'Credit indicators',{'id': 15,'name': 'Economic activity',{'id': 17,'name': 'Monetary indicators',{'id': 30,'name': 'Regional economy',{'id': 114,'name': 'International economy',{'id': 157,'name': 'National private financial system',{'id': 176,'name': 'Financial Stability',{'id': 222,'name': 'Financial Inclusion','parent_id': 0}]
我尝试了什么
我在 SO 中找到了这个函数,它能够将这个 dict 列表转换为嵌套的 python dict:
def list_to_tree(data):
out = {
# 0: { 'id': 0,'parent_id': 0,'name': "Root node",'sub': [] }
}
for p in data:
out.setdefault(p['parent_id'],{ 'sub': [] })
out.setdefault(p['id'],{ 'sub': [] })
out[p['id']].update(p)
out[p['parent_id']]['sub'].append(out[p['id']])
return out[0]
{'id': 0,'name': 'rootnode','parent_id': None,'sub': [{'id': 1,'sub': [{'id': 2,'name': 'Exchange rates','parent_id': 1,'sub': [{'id': 242,'name': 'Controlled or free rates','parent_id': 2,'sub': []},{'id': 243,'name': 'Floating rates',{'id': 532,'name': 'Real and effective exchange rate indices',{'id': 533,'name': 'Foreign exchange and wage indicators',{'id': 548,'name': 'Average of period',
但我想以这种方式生成字典,没有 id
{
'name': 'rootnode','children': [{
'name': 'External sector','children': [{
'name': 'Exchange rates','children': [{
'name': 'Controlled or free rates','children': []},{
'name': 'Floating rates',{
'name': 'Real and effective exchange rate indices',{
'name': 'Foreign exchange and wage indicators',{
'name': 'Average of period',
有什么方法可以改变我找到的这个函数以产生所需的输出? 我们非常欢迎任何提示、提示或建议。
解决方法
您可以稍作修改即可使用该功能:
- 使用“children”键而不是“sub”键
- 仅使用您想要的键(名称和子节点)初始化根节点
- 不要调用
.update
(复制所有键),只分配“名称”键
def list_to_tree(data):
out = {
0: { 'name': 'rootnode','children': [] }
}
for p in data:
out.setdefault(p['parent_id'],{ 'children': [] })
out.setdefault(p['id'],{ 'children': [] })
out[p['id']]['name'] = p['name']
out[p['parent_id']]['children'].append(out[p['id']])
return out[0]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。