繁体   English   中英

如何将python嵌套字典转换为非嵌套字典?

[英]How to convert python nested dict to non-nested dict?

如何转换下面的src dict(嵌套字典)

{
    'a':{'b':1, 'c':{'d':2}},
    'b':3,
    'c':{'d':4, 'a':5}
}

在下面dst dict(不是嵌套)?

{
    'a.b':1,
    'a.c.d':2,
    'b':3,
    'c.d':4,
    'c.a':5
}

src dict是嵌套的dict。 并且dst dict不是嵌套的dict。

有没有简单的方法来做这个约定?

这是flatten字典的python包。 你可以用它

https://pypi.org/project/flatten-dict/

执行:

from flatten_dict import flatten

nested = {'a': {'b': 1, 'c': {'d': 2}},
          'b': 3,
          'c': {'d': 4, 'a': 5}}

flat = flatten(nested, reducer=lambda k1, k2: k2 if k1 is None else k1 + '.' + k2)
print(flat)
# {'a.b': 1, 'a.c.d': 2, 'b': 3, 'c.d': 4, 'c.a': 5}

有多种方式。 这是一种方法。

    nested_dict = {
        'a': {
            'b': 1,
            'c': {
                'd': 2
            }
        },
        'b': 3,
        'c': {
            'd': 4,
            'a': 5
        },
    }

    flatten_dict = {}

    def flatten_the_nested(nested_dict, parent_key=''):
        for key, value in nested_dict.items():
            new_key = parent_key + '.' + key if parent_key is not '' else key
            if isinstance(value, dict):
                flatten_the_nested(value, new_key)
            else:
                flatten_dict[new_key] = value

        return flatten_dict


     print(flatten_the_nested(nested_dict, ''))

您将获得以下结果。

    {'c.d': 4, 'c.a': 5, 'b': 3, 'a.b': 1, 'a.c.d': 2}

或者,如果您想使用某些库,则可以使用https://pypi.org/project/flatten-dict/

好吧,它并不复杂。 在短短几分钟内,我得到了以下内容:

def flatten(dic, prefix = ""):
    if prefix is not "":
        prefix = prefix + "."

    result = {}

    for k, v in dic.iteritems():
        if isinstance(v, dict):
            for k1, v1 in flatten(v, prefix + k).iteritems():
                result[k1] = v1
        else:
            result[prefix + k] = v

    return result

不过,我还没有彻底测试过这个算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM