首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >格式化嵌套Python字典以在jinja2模板中呈现的最佳方法

格式化嵌套Python字典以在jinja2模板中呈现的最佳方法
EN

Stack Overflow用户
提问于 2016-04-17 18:41:06
回答 1查看 426关注 0票数 3

嗨,我有一个Python嵌套字典,如下所示:

代码语言:javascript
复制
fv_solution = {
    'relaxationFactors':
        {
            'fields':
                {
                    '\"(p|pa)\"': 0.3,
                    'alpha': 0.1,
                },
            'equations':
                {
                    '\"(U|Ua)\"': 0.7,
                    '\"(k|epsilon)\"': 0.7,
                }
        },
    'relaxationFactors2':
        {
            'fields':
                {
                    '\"(p|pa)\"': 0.3,
                    'alpha': 0.1,
                },
            'equations':
                {
                    '\"(U|Ua)\"': 0.7,
                    '\"(k|epsilon)\"': 0.7,
                }
        }
}

我想呈现这样的文件:

代码语言:javascript
复制
relaxationFactors
{
    fields
    {
        "(p|pa)"        0.3;
        alpha           0.1;
    }
    equations
    {
        "(U|Ua)"        0.7;
        "(k|epsilon)"   0.7;
    }
}

relaxationFactors2
{
    fields
    {
        "(p|pa)"        0.3;
        alpha           0.1;
    }
    equations
    {
        "(U|Ua)"        0.7;
        "(k|epsilon)"   0.7;
    }
}

我最好的方法是使用替换过滤器,但除此之外,它不是一个优雅的解决方案,结果并不理想。

我的过滤器

代码语言:javascript
复制
{{ data|replace(':','    ')|replace('{','\n{\n')|replace('}','\n}\n')|replace(',',';\n')|replace('\'','') }}

结果

代码语言:javascript
复制
{  # <- not needed
relaxationFactors2     
{
fields     
{
alpha     0.1;
 "(p|pa)"     0.3 # <- missing ;
}
; # <- aditional ;
 equations     
{
"(U|Ua)"     0.7;
 "(k|epsilon)"     0.7 # <- missing ;
}

} # <- not needed
; # <- aditional ;
 relaxationFactors     
{
fields     
{
alpha     0.1;
 "(p|pa)"     0.3 # <- missing ;
}
; # <- aditional ;
 equations     
{
"(U|Ua)"     0.7;
 "(k|epsilon)"     0.7 # <- missing ;
}

}

} # <- not needed ;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-17 20:23:51

你应该写一个自定义过滤器..。

代码语言:javascript
复制
def format_dict(d, indent=0):
    output = []
    for k, v in d.iteritems():
        if isinstance(v, dict):
            output.append(indent*' ' + str(k))
            output.append(indent*' ' + '{')
            output.append(format_dict(v, indent+4))
            output.append(indent*' ' + '}')
        else:
            output.append(indent*' ' + str(k).ljust(16) + str(v) + ';')
    return '\n'.join(output)

..。并按照描述的正式在这里或完整的示例这里设置它。然后,你可以:

代码语言:javascript
复制
{{ data|format_dict }}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36680631

复制
相关文章

相似问题

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