转义格式化字符串中的一个键

escaping one of the keys in formatting a string

我试图在运行时生成一个来自对象的动态 ID,并将其插入数据库。

'{"mykey": {value}}'.format(value=obj.id)

但这会出错

KeyError: '"mykey"'

预期结果:

'{"mykey": 4}' # assuming obj.id = 4

我知道我可以使用 json.dumps,但我不想使用 json 来完成如此简单的任务,因此不得不求助于:'{"mykey": %s}' %(obj.id,)

但我很想知道一种使用 格式 来做到这一点的方法。

你需要escape the {:

>>> value = 4
>>> '{{"mykey": {value}}}'.format(value=value)
'{"mykey": 4}'

您还可以访问在上下文中传入 obj 的格式模板内的对象属性:

>>> from collections import namedtuple
>>> Object = namedtuple('Object', 'id')
>>> obj = Object(id=4)
>>> obj.id
4
>>> '{{"mykey": {obj.id}}}'.format(obj=obj)
'{"mykey": 4}'

同样适用于 format strings coming up in Python 3.6:

>>> value = 4
>>> f'{{"mykey": {value}}}'
'{"mykey": 4}'