2016-01-10 42 views
2

我已經大和複雜的設置詞典],與裏面列出了字典的名單,有些事情,如:最佳Python的方式

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腳本作爲變量導入,在使用'settings'變量之前,我必須設置'variable0'和'variable1'。 有沒有更乾淨的方法來實現這樣的模板?

回答

3

你可以把它變成一個功能:

#!/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') 
+0

謝謝你,最後我用這個變種。但是這些「設置」將由人們用手鍵入,而不必知道Python語法。這就是爲什麼我只用大字典的文件,因爲它的結構易於理解。 但這些結構仍然需要模板化。並且給他們解析函數看起來不是很好,然後解析字典。無論如何,這是最好的解決方案。 – Arkady

2

如果你的字典也使用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') 
+0

你也可以用eval來做,但它有風險... –

+0

謝謝,我會研究如果我可以在這裏使用json :-)好主意和解決方案! – Arkady