需要从一个扁平的字典创建一个分层的字典
时间:2020-03-06 14:36:59 来源:igfitidea点击:
我有一个命令,看起来像这样:
{ 'foo': { 'opt1': 1, 'opt2': 2, }, 'foo/bar': { 'opt3': 3, 'opt4': 4, }, 'foo/bar/baz': { 'opt5': 5, 'opt6': 6, } }
我需要让它看起来像:
{ 'foo': { 'opt1': 1, 'opt2': 2, 'bar': { 'opt3': 3, 'opt4': 4, 'baz': { 'opt5': 5, 'opt6': 6, } } } }
我应该指出,可以并且将有多个顶级键(在这种情况下为" foo")。我可能可以将一些东西放在一起以获得所需的东西,但是我希望有一种更有效的解决方案。
解决方案
像这样:
def nest(d): rv = {} for key, value in d.iteritems(): node = rv for part in key.split('/'): node = node.setdefault(part, {}) node.update(value) return rv
def layer(dict): for k,v in dict: if '/' in k: del dict[k] subdict = dict.get(k[:k.find('/')],{}) subdict[k[k.find('/')+1:]] = v layer(subdict)