2017-10-18 32 views
0

我有一個準備好的字符串,例如my_string = 'My name is {name}.'從準備好的字符串獲取關鍵參數

,我有kwargs字典,如:

format_kwargs = { 
    'name': 'John', 
    ... 
} 

所以,我可以格式化以這種方式字符串:my_string.format(**format_kwargs)

這是所有好。問題是我想確定字符串中的鍵,所以我不需要計算kwargs。也就是說,默認情況下,我在這些字符串中使用了一組關鍵字,但並非所有字符串都用於所有字符串。它們基本上是向用戶顯示的常規消息,例如'{name},您的帳戶已成功創建!'。

我想要做的事,如:

format_kwargs = {} 

if 'name' in <my_string.keys>: 
    format_kwargs['name'] = self.get_user().name 
if '...' in <my_string.keys>: 
    format_kwargs['...'] = some_method_...() 

my_string.format(**format_kwargs) 

如何取回鑰匙?

編輯:

簡單if 'name' in my_string不起作用,因爲這也符合像{parent_name}'The name change was not successful.'

+1

它提供比現在更多的關鍵字沒有問題在格式字符串中。 –

+0

什麼是'self.get_user()'? – RomanPerekhrest

+1

這些價值如此*非常昂貴*來計算它是值得的嗎? –

回答

0

使用string.Formatter

from string import Formatter 
s = 'Hello {name}. Are you {debil_status}' 
keys = [i[1] for i in Formatter().parse(s)] 
print keys 

>>> ['name', 'debil_status']