Python 2.6中.format()出现KeyError错误

4

我尝试使用变量typesource{0}{1}进行字符串格式化,但是出现了KeyError错误:

import json
data = {
        "u_in_record_type": '{0}',
        "u_company_source": '{1}'
    }
data = json.dumps(data)
type="Test"
source="Test"
print(data.format(type, source))

Traceback (most recent call last):
  File "untitled.py", line 10, in <module>
    print(data.format(type, source))
KeyError: '"u_in_record_type"'

1
你对代码有什么期望? - Psytho
1
它不能工作是因为json会加上括号。你确切地想要实现什么? - Jean-François Fabre
将 {0} 替换为类型,将 {1} 替换为源代码。 - Roy Holzem
1个回答

4
尝试在json dumps中应用str.format是注定失败的想法,原因有多个,其中主要原因是字符串转储中的封闭大括号{}与格式化不兼容或丢失。我建议提前使用命名字段对字典进行预处理。
import json

data = {
        "u_in_record_type": '{type}',
        "u_company_source": '{source}'
    }

type="Test"
source="Source"

new_data = {k:v.format(type=type,source=source) for k,v in data.items()}

在 Python 2.7 之前的语法中(尚未提供字典推导式):

new_data = dict((k,v.format(type=type,source=source)) for k,v in data.items())

字典推导式将参数应用于所有记录,选择它们需要的那些记录。然后,您可以转储该版本的字典。
基于字典的变体(当有很多变量时非常方便)是:
fd = dict(type="Test",source="Source")
new_data = {k:v.format(**fd) for k,v in data.items()}

我尝试使用string.format而不是json.dumps,但是我遇到了错误,指出字典不能进行格式化。 - Roy Holzem
是的,您需要重新构建字典并为每个键/值对应用格式。 - Jean-François Fabre
我在您的代码中遇到了错误:File "test.py", line 11 new_data = {k:v.format(type=type,source=source) for k,v in data.items()} ^ SyntaxError: invalid syntax - Roy Holzem
哦,好的现在它可以工作了,你能否也更新一下基于字典的变量到2.6版吗?new_data = {k:v.format(**fd) for k,v in data.items()} - Roy Holzem
尝试使用dict((k,v.format(**d)) for k,v in data.items()),但我没有Python 2.6来检查它是否有效。 - Jean-François Fabre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接