从准备好的字符串获取关键参数

时间:2017-10-18 10:13:10

标签: python

我有一个准备好的字符串,例如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 :(得分: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']