我坚持使用以下数据。
有一个清单。
[{name: '/', children: [{name: 'bin'}, {name: 'sbin'}, {name: 'home'}]},
{name: 'home', children: [{name: 'user1'}, {name: 'user2'}]},
{name: 'user2', children: [{name: 'desktop'}]}]
我想将上面的列表转换为以下字典。
{name: '/', children: [{name: '/bin'}, {name: '/sbin'}, {name: '/home', children: [{name: 'user1'}, {name: 'user2', children: [{name: 'desktop'}]}]}]}
我写了一些代码来转换样式以上的数据。
def recT(data, child, parent, collector):
dparent = dict(name=parent)
dchildren = dict()
lst = []
for c in child:
lst.append(dict(name=c['name']))
for d in data:
if c['name'] == d['name']:
if len(d) > 1:
dchildren.update(dict(children=recT(data, d['children'], d['name'], collector)))
dparent.update(dchildren)
collector.update(dparent)
return lst
然后,
myd = dict()
for d in data2:
if len(d) > 1:
recT(data2, d['children'], d['name'], myd)
注意:data2是我想要隐藏的字典列表。
但是,输出字典是列表中的最后一条记录:
{'children': [{'name': 'desktop'}], 'name': 'user2'}
请帮忙。
答案 0 :(得分:0)
正如lazyr所说,你无法像dict
那样复制密钥。您可以将其转换为以下格式,以使其成为有效的python dict
语法:
{
'/': {
'bin': {},
'sbin': {},
'home': {
'user1': {},
'user2': {
'desktop': {}
}
}
}
您获取列表中最后一条记录的原因是因为您的dict使用了唯一键
mydict = {}
mydict['name'] = 1
mydict['name'] # is 1
mydict['name'] = 2
for x,y in mydict.iteritems():
print '{0}: {1}'.format(x,y)
>> name: 2 # Note only one entry
答案 1 :(得分:0)
现在,我从@ lazyr回答How to convert a strictly sorted list of strings into dict?得到了它。
然后,我转换成字符串并使用myReplacer()将其更改为所需格式。
这里:
def myReplacer(strdata):
strdata = strdata.replace("{", '{ name:')
strdata = strdata.replace(': {', ', children : [{')
strdata = strdata.replace('}', '}]')
strdata = strdata.replace(': None,', '},{ name:')
strdata = strdata.replace(': None', '')
strdata = strdata.replace(", '", "}, { name: '")
return strdata[:-1]
谢谢@lazyr,每个人都帮帮我。需要一些改进。