Python非平坦di

2024-06-05 22:51:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个多维法则:

a = {'a' : 'b', 'c' : {'d' : 'e'}}

并编写了一个简单的函数来展开这个dict:

^{pr2}$

用dict a调用此函数后,我得到结果:

{'a' : 'b', 'c.d' : 'e'}

现在,在对这个扁平的dict做了一些说明之后,我需要从这个扁平的dict构建新的多维dict。示例:

>> unflatten({'a' : 0, 'c.d' : 1))
{'a' : 0, 'c' : {'d' : 1}}

我唯一的问题是我没有函数unflatten:)
有人能帮忙吗?我不知道怎么做。在

编辑:

另一个例子:

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

应在未固定之后:

{'a': 'b', 'c': {'d': {'e': {'f': {'g': {'h': {'i': {'j': {'k': {'l': {'m': {'n': {'o': {'p': {'r': {'s': {'t': {'u': {'w': 'z'}}}}}}}}}}}}}}}}}}}

还有一个:

{'a' : 'b', 'c.d' : 'z', 'c.e' : 1}

收件人:

{'a' : 'b', 'c' : {'d' : 'z', 'e' : 1}}

我知道,这大大增加了任务的难度。这就是为什么我对这件事有意见,几小时内没有找到解决办法。。在


Tags: 函数编辑示例dict收件人例子意见扁平
3条回答
from collections import defaultdict
def unflatten(d):
    ret = defaultdict(dict)
    for k,v in d.items():
        k1,delim,k2 = k.partition('.')
        if delim:
            ret[k1].update({k2:v})
        else:
            ret[k1] = v
    return ret

作为一个粗略的草稿(可能需要在变量名选择上稍作改进,也许还有健壮性,但它对给定的示例有效):

def unflatten(d):
    result = {}
    for k,v in d.iteritems():
        if '.' in k:
            k1, k2 = k.split('.', 1)
            v = {k2: v}
            k = k1
        result[k] = v
    return result
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

相关问题 更多 >