0
我想将表示为像这样的列表树结构...转变从列表树结构到Python字典
['access_ctrl_allow',
['description', ['Access Control - Allow']],
['type', ['4']],
['metadata'],
['output', ['0']],
['rule',
['0',
['enabled', ['1']],
['action', ['type', ['accept_conn']]],
['match',
['services',
['0',
['name', ['DHCP']],
['trigger',
['0',
['protocol', ['17']],
['dst', ['start', ['67']], ['end', ['67']]],
['src', ['start', ['67']], ['end', ['68']]]]]]]]]]]
到Python字典,像这样:
{'access_ctrl_allow': {'output': '0',
'type': '4',
'description': 'Access Control - Allow',
'rule': {'0': {'action': {'type': 'accept_conn'},
'enabled': '1',
'match': {'services': {'0': {'trigger': {'0': {'src': {'start': '67',
'end': '68'},
'dst': {'start': '67', 'end': '67'},
'protocol': '17'}},
'name': 'DHCP'}}}}},
'metadata': {}}}
我有代码,不会和它似乎产生正确的输出...
def dictify(data):
k, v = data[0], data[1:]
if len(v) == 0:
return {k: {}}
elif len(v) == 1 and len(v[0]) == 1:
return {k: v[0][0]}
else:
new = {}
for datum in v:
new.update(dictify(datum))
return {k: new}
...但感觉笨重。你能提供任何清理这些的建议吗?特别是,需要对列表中的列表(v[0][0]
)进行解引用,这意味着我必须有更好的方法。
使用http://meta.codereview.stackexchange.com/代替。这不是一个编程问题,SO不适用于代码评论。 –
这不是一个编程问题?如果我还没有试图自己解决它,这只是一个编程问题吗?如果它能让你快乐,我可以删除我的代码。 – larsks
这里没有问题要解决。您自己说过 - 这适用于输入数据,似乎是一个完全合理的递归方法。它适合您的数据和您的期望。你想要单行吗?它出什么问题了?它是否被确定为瓶颈?无论哪种方式,它都不适合SO。 –