我try 用花括号格式化字符串,如下所示:

dct_mapper = dict(a=1)
s = '{key1: value2, key1: value2}; attrib1={a}; attrib2={b}'
s.format(**dct_mapper)

Results in:
# KeyError: 'key1'

Expected:
# '{key1: value2, key1: value2}; attrib1=1; attrib2={b}'

另一个限制是,我需要在以后的输出中再次使用.format_map(),这会导致使用的解决方案出错.format(),因为外面的花括号将消失.

我try 了defaultdict from the collections个包,也try 了.format_map()个包,然后用正则表达式替换brackets with additional ones,这感觉不像是一个解决方案,更像是一个黑客,如果字符串中有多个重复括号,那么它也不起作用.

它不是一个json字符串,因为这样我就可以使用json库来映射这些值.

有人知道如何解决这个问题吗?

我目前考虑使用循环和str.replace('{a}', 1),但这感觉笨拙.

推荐答案

如果你不想把{}换成{{}},我建议你从string换成Template.它的界面允许您自定义格式选项,如下所示:

from string import Template


class MyTemplate(Template):
    delimiter = ""


dct_mapper = dict(a=1)
s = MyTemplate('{key1: value2, key1: value2}; attrib1={a}; attrib2={b}')
print(s.safe_substitute(**dct_mapper))

正如您所希望的,输出是:

说明:

此外,模板有safe_substitute个,这允许您只格式化整个字符串中的几个变量,并且不会对不存在的变量格式产生错误.

此外,如果你喜欢这个而不是那个,s.safe_substitute(**dct_mapper)可以改成s.safe_substitute(dct_mapper).

Python相关问答推荐

获取Azure Pipelines以从pyproject.toml(而不是relevments_dev.文本)安装测试环境

两极:如何分割一个大 pyramid 并并行保存每个

Polars -转换为PL后无法计算熵.列表

使用图片生成PDF Django rest框架

NumPy中的右矩阵划分,还有比NP.linalg.inv()更好的方法吗?

按照行主要蛇扫描顺序对点列表进行排序

从包含数字和单词的文件中读取和获取数据集

如何在Python中使用io.BytesIO写入现有缓冲区?

列表上值总和最多为K(以O(log n))的最大元素数

类型错误:输入类型不支持ufuncisnan-在执行Mann-Whitney U测试时[SOLVED]

从numpy数组和参数创建收件箱

在Polars(Python库)中将二进制转换为具有非UTF-8字符的字符串变量

聚合具有重复元素的Python字典列表,并添加具有重复元素数量的新键

在pandas中使用group_by,但有条件

Flash只从html表单中获取一个值

重置PD帧中的值

人口全部乱序 - Python—Matplotlib—映射

循环浏览每个客户记录,以获取他们来自的第一个/最后一个渠道

Pandas—MultiIndex Resample—我不想丢失其他索引的信息´

使用类型提示进行类型转换