【问题标题】:Getting key arguments from prepared string [duplicate]从准备好的字符串中获取关键参数[重复]
【发布时间】: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


【解决方案1】:

使用 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']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-13
    • 2023-02-08
    • 2012-10-05
    • 1970-01-01
    • 2012-04-18
    • 2019-05-26
    • 2011-01-15
    • 2017-03-26
    相关资源
    最近更新 更多