【发布时间】:2023-03-27 23:40:01
【问题描述】:
我有一个准备好的字符串,例如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.' 之类的东西
【问题讨论】:
-
提供比格式字符串中更多的关键字是没有问题的。
-
什么是
self.get_user()? -
这些值是不是就这么非常昂贵来计算是否值得?
-
if '{name}' in my_string:有什么问题?然而,正如 Jon 暗示的那样,简单地创建整个 dict 可能比执行所有这些if测试更有效。 -
可以在this related question中找到可能的解决方案。然而,在这种特殊情况下,另一种解决方案是实现一个类似 dict 的类,该类根据需要计算值。
标签: python