格式化双花括号中的字符串

Formatting string which is in double curly braces

我有以下需要执行的短代码

isin = 'US0028241000'
payload = f'[{"idType":"ID_ISIN", "idValue": "{isin}"}]'

它输出一个ValueError: Invalid format specifier

我也试过了:

payload = '[{"idType":"ID_ISIN", "idValue": "{}"}]'.format(isin)

这个也不行。 我的想法是,这是因为花括号位于字典中。我该如何执行这首曲子?

您的标题暗示了解决方案。在 f-string 中,您需要使用 {{}} 作为文字花括号,但您从不引入它们。

>>> f'[<b>{{</b>"idType":"ID_ISIN", "idValue": "{isin}"<b>}}</b>]'
'[{"idType":"ID_ISIN", "idValue": "US0028241000"}]'

就是说,不要使用字符串格式化工具构造 JSON 值;使用 json 模块。

>>> import json
>>> json.dumps([{'idType': 'ID_ISIN', 'idValue': isin}])
'[{"idType": "ID_ISIN", "idValue": "US0028241000"}]'

问题是大括号。

要避开它们,请尝试:

payload = f'[{{"idType":"ID_ISIN", "idValue": "{isin}"}}]'
isin = 'US0028241000'
payload = f'[{{"idType":"ID_ISIN", "idValue": "{isin}"}}]'
print(payload)

为了在格式化字符串时忽略任何大括号,只需用 {}

将其包裹起来

f 字符串考虑花括号 {} 内的任何内容是 python 表达式。

这里的问题也是一样的,你试图把花括号当作字典,但 f string 认为它是一个表达式。当它试图解释我们得到 ValueError: Invalid format specifier.

示例 1: 尝试将 list 变量放入 f 字符串

l = [1,2,3]
`f'{l}'`

示例 2: 尝试将 dict 放入 f 字符串

你应该使用双花括号

`f'[{{"idType":"ID_ISIN", "idValue": "{isin}"}}]'`

但是如果你在某个变量中声明了 dict 那么你可能会使用如下:

out = {"idType":"ID_ISIN", "idValue": f"{isin}"}
f'{out}'