Python如何地柜解析这种数据类型,data__key__hello = "world"
黄舟
黄舟 2017-05-18 10:54:23
[Python讨论组]

比如有这么一个字典:

{
    'data__key_hello': "world",
    'data__key_bar': "foo",
    'data__a': "b",
    'b': 'c',
}

转换之后变成

{
    'data': {
        'key': {
            'hello': 'world',
            'bar': 'foo'
        },
        'a': 'b',
    },
    'b': 'c'
}

就是以下划线进行一个分割

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(2)
世界只因有你
# coding: utf-8

def parse_dict(obj={}):
    result = {}
    for key in obj:
        value = obj[key]
        parse_key_value(key, value, result)                
    return result

def parse_key_value(key, value, result={}):
    if not key:
        return

    head = ''
    while 1:
        head, _, tail = key.partition('_') 
        if head:
            break
        key = tail

    if head not in result:
        if tail:
            result[head] = {} 
        else:
            result[head] = value
            return 
    
    parse_key_value(tail, value, result[head])

obj = {
    'data__key_hello': "world",
    'data__key_bar': "foo",
    'data__a': "b",
    'b': 'c',
}

print parse_dict(obj)
巴扎黑

凑合着用吧

d = {
    'data__key_hello': "world",
    'data__key_bar': "foo",
    'data__a': "b",
    'b': 'c',
}

n = {}
for k, v in d.items():
    keys = k.replace('__', '_').split('_')
    child = n
    for i, key in enumerate(keys):
        child = child.setdefault(key, {} if i < len(keys) - 1 else v)

print n
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号