Python - Unflatten dict

Gal*_*lmi 5 python

我有这个多维词典:

a = {'a' : 'b', 'c' : {'d' : 'e'}}
Run Code Online (Sandbox Code Playgroud)

并编写简单的函数来压扁该字典:

def __flatten(self, dictionary, level = []):
    tmp_dict = {}
    for key, val in dictionary.items():
        if type(val) == dict:
            tmp_dict.update(self.__flatten(val, level + [key]))
        else:
            tmp_dict['.'.join(level + [key])] = val
    return tmp_dict
Run Code Online (Sandbox Code Playgroud)

用dict调用这个函数后a我得到了结果:

{'a' : 'b', 'c.d' : 'e'}
Run Code Online (Sandbox Code Playgroud)

现在,在对这个扁平的字典做出一些指示之后,我需要从扁平的字母中构建新的,多维的字典.例:

>> unflatten({'a' : 0, 'c.d' : 1))
{'a' : 0, 'c' : {'d' : 1}}
Run Code Online (Sandbox Code Playgroud)

我唯一的问题是我没有功能unflatten:)
任何人都可以帮忙吗?我不知道该怎么做.

编辑:

另一个例子:

{'a' : 'b', 'c.d.e.f.g.h.i.j.k.l.m.n.o.p.r.s.t.u.w' : 'z'}
Run Code Online (Sandbox Code Playgroud)

应该是unflatten之后:

{'a': 'b', 'c': {'d': {'e': {'f': {'g': {'h': {'i': {'j': {'k': {'l': {'m': {'n': {'o': {'p': {'r': {'s': {'t': {'u': {'w': 'z'}}}}}}}}}}}}}}}}}}}
Run Code Online (Sandbox Code Playgroud)

而另一个:

{'a' : 'b', 'c.d' : 'z', 'c.e' : 1}
Run Code Online (Sandbox Code Playgroud)

至:

{'a' : 'b', 'c' : {'d' : 'z', 'e' : 1}}
Run Code Online (Sandbox Code Playgroud)

我知道,这大大增加了任务的难度.这就是为什么我有这个问题,并在几小时内找不到解决方案..

Mes*_*ssa 13

def unflatten(dictionary):
    resultDict = dict()
    for key, value in dictionary.iteritems():
        parts = key.split(".")
        d = resultDict
        for part in parts[:-1]:
            if part not in d:
                d[part] = dict()
            d = d[part]
        d[parts[-1]] = value
    return resultDict
Run Code Online (Sandbox Code Playgroud)