如何使用计算键值映射格式化字符串



我需要这样的东西:'{abc} {def}'.format(lambda key: compute_value(key))。看起来我需要为此实现一个自定义映射:

class Vars(collections.abc.Mapping):
def __getitem__(self, key):
return 'abc'
def __len__(self):
pass
def __iter__(self):
pass

现在,如果我尝试'{abc} {def}'.format(**Vars()),我会得到TypeError: iter() returned non-iterator of type 'NoneType'错误。出于某种原因,它试图遍历我的映射。

有没有一种简单的方法可以使用计算键值映射来格式化字符串?

我认为您可以使用str.format_map(),这样每个项目都可以根据需要提取,而不是通过**扩展到kwargs

'{abc} {def}'.format_map(Vars())

结果:

'abc abc'

注:Python 3.2+仅

最新更新