2014-01-30 83 views
0

我在python2.7中有以下問題。我想有一個模板字典像這樣:Python dictonary帶有字符串佔位符和默認值

my_dict = { 
    'key_1' : %(key_1)s, 
    'key_2' : %(key_2)s, 
} 

,我想用這樣的:

new_dict = my_dict % {'key_1': 'something', 'key_2': 'anything'} 

但這引發異常:

TypeError: unsupported operand type(s) for %: 'dict' and 'dict'

我問題有兩點:

  1. 是否有任何方式或結構,最好是字典,以實現這一點:
  2. 考慮到有,是否有一種方法來默認值,如果沒有值傳遞?

我的意思,2是:

my_dict = { 
    'key_1' : %s or None, # if no value is interpolated at key 'key_1' 
} 
+0

我很困惑你的問題。這是無效的Python代碼:'my_dict = {'key_1':%(key_1)s,'key_2':%(key_2)s,}'。這也不是:'my_dict%{'key_1':'某事','key_2':'任何'}'。你能否更多地解釋你想完成什麼(可能爲什麼)? –

+0

'blah-blah%values'已棄用,請嘗試使用'str.format(..)'而不是 – akaRem

回答

1
template = { 
    'key_1' : '%(key_1)s', 
    'key_2' : '%(key_2)s', 
} 

values_dict = {'key_1': 'something', 'key_2': 'anything'} 

然後作出新的dict與所有格式:

new_dict = dict((key, template[key] % values_dict) for key, value in template.items()) 

或者如果你確定更新原始dict

for key, value in template.items(): 
    template[key] %= values_dict