发布于2020-01-11 23:01 阅读(1530) 评论(0) 点赞(0) 收藏(3)
我有以下格式的数据:
[['Director', 9010],
['Director - Product Manager', 9894],
['Director - Product Manager - Project Manager', 9080],
['Director - Product Manager - Project Manager - Staff', 5090],
['Director - Product Manager - Project Manager - Staff 2', 5087],
['Director - Product Manager - Project Manager 2', 9099],...]
并希望输出看起来像这样:
{
'title': 'Director',
'id': 9010,
'children': [
{
'title': 'Product Manager',
'id': 9894,
'children': [
{
'title': 'Project Manager',
'id': 9080,
'children': [
...
]
},{
'title': 'Project Manager 2',
'id': 9099,
'children': [
...
]
}],
...
]
},
...
]
}
我一直在玩字典,但努力使ID与标题匹配。任何建议表示赞赏。
一种有效的方法是使最外层成为列表而不是字典。当我们遍历标题字符串中的每个标题时,我们会在当前列表中查找具有该标题的字典。如果标题在当前列表中不存在,那么我们需要创建一个新字典。如果确实存在,则将该子项的子级列表设为新的当前列表,然后继续查找下一个标题。
我还编写了一个递归prune
函数,一旦我们输入完所有数据,就删除所有空子列表,以防万一。
import json
lst = [
['Director', 9010],
['Director - Product Manager', 9894],
['Director - Product Manager - Project Manager', 9080],
['Director - Product Manager - Project Manager - Staff', 5090],
['Director - Product Manager - Project Manager - Staff 2', 5087],
['Director - Product Manager - Project Manager 2', 9099],
]
# Search for a matching name in the current list.
# If it doesn't exist, create it.
def insert(lst, name, idnum):
for d in lst:
if d['title'] == name:
break
else:
d = {'title': name, 'id': idnum, 'children': []}
lst.append(d)
return d['children']
# Remove empty child lists
def prune(lst):
for d in lst:
if d['children']:
prune(d['children'])
else:
del d['children']
# Insert the data into the master list
master = []
for names, idnum in lst:
lst = master
for name in [s.strip() for s in names.split(' - ')]:
lst = insert(lst, name, idnum)
prune(master)
# Get the top level dict from the master list
data = master[0]
print(json.dumps(data, indent=4))
输出
{
"title": "Director",
"id": 9010,
"children": [
{
"title": "Product Manager",
"id": 9894,
"children": [
{
"title": "Project Manager",
"id": 9080,
"children": [
{
"title": "Staff",
"id": 5090
},
{
"title": "Staff 2",
"id": 5087
}
]
},
{
"title": "Project Manager 2",
"id": 9099
}
]
}
]
}
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/217382/48066d55bdf608696736/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!