【问题标题】:Best pythonic way to template dictionary模板字典的最佳pythonic方法
【发布时间】:2016-01-10 12:09:28
【问题描述】:

我有大而复杂的设置字典,里面有字典列表,比如:

settings = {
    'general': {
        'cars': ['car1', 'car2'],
    },
    'local': ['loc1', 'loc2'],
}

但是这些设置字段中的任何一个都必须进行参数化,因为我需要这些设置的许多副本,这些设置在字段中具有不同的值。 比如:

variable0 = 'car'
variable1 = 'loc'
settings = {
    'general': {
        variable0+'s': [variable0+'1', variable0+'2'],
    },
    variable1+'al': [variable1+'1', variable1+'2'],
}

所以,它是一种模板字典。有没有一种pythonic方法来实现这一点? 现在我找到了解决方案,将整个python脚本作为变量导入,在使用它的“设置”变量之前,我必须设置“变量0”和“变量1”。 有没有更干净的方法来实现这样的模板?

【问题讨论】:

    标签: python templates dictionary


    【解决方案1】:

    你可以把它变成一个函数:

    #!/usr/bin/env python
    
    def get_settings(variable0, variable1):
        return {
            'general': {
                variable0+'s': [variable0+'1', variable0+'2'],
            },
            variable1+'al': [variable1+'1', variable1+'2'],
        }
    
    print get_settings('car', 'loc')
    

    【讨论】:

    • 谢谢,最后我用了这个变种。但是那些“设置”将由不需要知道 python 语法的人手动输入。这就是为什么我只使用带有大字典的文件,因为它的结构很容易理解。但是这些结构仍然需要模板化。并给他们解析函数看起来我不是很好,然后解析字典。无论如何,这是最好的解决方案。
    【解决方案2】:

    如果你的dict也兼容json:

    import json
    def get_settings(**kw):
        return json.loads(r"""{{
            "general": {{
                "{variable0:}s": ["{variable0:}1", "{variable0:}2"]
            }},
            "{variable1:}al": ["{variable1:}1", "{variable1:}2"]
        }}""".format(**kw)
                          )
    
    print get_settings(variable0="pop", variable1='cheese')
    

    【讨论】:

    • 谢谢,我会研究是否可以在这里使用 json :-) 好主意和解决方案!
    猜你喜欢
    • 2016-06-18
    • 2018-04-28
    • 2017-05-28
    • 1970-01-01
    • 2011-09-23
    • 2020-02-20
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多