[英]How to get list of dict instead of using collection.defaultdict in python
我试图将列表递归转换为嵌套字典,如下所示:
给定输入:-
parse_list = ['A','B','C','D']
所需输出:-
data = [
{'name': 'A',
'childs': [
{'name': 'B',
'childs': [
{'name': 'C',
'childs': [
{'name': 'D',
'childs': none }]}]}]}]
我的代码:-
from collections import defaultdict
class_dict =defaultdict(list)
data =defaultdict(list)
parse_list.reverse()
def create_dict(parse_list,class_dict):
for index ,listitem in enumerate(parse_list):
new_class_dict = defaultdict(list)
new_class_dict.__setitem__('name', listitem)
new_class_dict['childs'].append(class_dict)
class_dict = new_class_dict
return class_dict
data = create_dict(parse_list,class_dict)
import yaml
with open('data.yml', 'w') as outfile:
outfile.write( yaml.dump(data, default_flow_style=False))
但是由于defaultdict(list),我总是在yaml中获得许多额外的缩进,这是不期望的。 还有其他方法可以获取[{....}]而不是使用collection.defaultdict。
您可以像这样简单地实现它
parse_list = ['A','B','C','D']
dicton={}
for i in reversed(parse_list):
dicton['child']=[dicton]
dicton['name']=i
print dicton
#output {'name': 'A',
'child': [{'name': 'B',
'child': [{'name': 'C',
'child': [{'name': 'D',
'child': [{}]
}]}]}]}
以递归的方式
parse_list = ['A','B','C','D']
def createdict(l, d):
if len(l) == 0:
return None
d = dict()
d['name'] = l[0]
d['childs'] = [createdict(l[1:], d)]
return d
resultDict = createdict(parse_list, dict())
这是一个递归解决方案
parse_list = ['A','B','C','D']
def descend(l):
if l:
return [{'name': l[0],
'childs': descend(l[1:])}]
else:
return None
data = descend(parse_list)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.