首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多级字典到ini

多级字典到ini
EN

Stack Overflow用户
提问于 2017-01-30 15:22:08
回答 1查看 1.1K关注 0票数 0

如何将多级(*)字典转换为ini?

示例:

代码语言:javascript
复制
>>> foo = {}
>>> foo['bar'] = {}
>>> foo['bar']['bar1'] =  1
>>> foo['bar']['bar2'] = {}
>>> foo['bar']['bar2']['bar3'] = 2
>>> foo['goo'] = {}
>>> print foo
{'goo': {}, 'bar': {'bar1': 1, 'bar2': {'bar3': 2}}}

如何将foo转换为ini文件格式?

代码语言:javascript
复制
[bar]
bar1 = 1
[bar.bar2]
bar3 = 2
[goo]

(*)多级字典(递归定义)是一种字典,其中的值可以是多级字典或原语类型(字符串或int)。

ConfigParser似乎无法做到这一点。

EN

回答 1

Stack Overflow用户

发布于 2017-01-30 16:45:50

你得走过去重新构造它:

代码语言:javascript
复制
import ConfigParser
from collections import defaultdict

d = {'goo': {}, 'bar': {'bar1': 1, 'bar2': {'bar3': 2}}}
res = defaultdict(dict)

def dict2ini(d, root):
    for k, v in d.items():
        if isinstance(v, dict):
            _key = '%s.%s' % (root, k) if root else k
            if v:
                dict2ini(v, _key)
            else:
                res[_key] = {}
        elif isinstance(v, (basestring, int, float)):
            res[root] = {k:v}
dict2ini(d, '')

res,看起来像您所需的结构,用于创建节和键:

{'bar.bar2': {'bar3': 2}, 'goo': {}, 'bar': {'bar1': 1}})

然后您可以轻松地编写ini配置:

代码语言:javascript
复制
config = ConfigParser.RawConfigParser()
for key in sorted(res.keys()):
    config.add_section(key)
    for subKey, value in res[key].items():
        config.set(key, subKey, value)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41939445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档