.format()python 2.6中的KeyError

时间:2018-04-30 08:27:35

标签: python json python-2.7 string-formatting

我尝试使用变量string format{0} {1} typesource,但我得到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 个答案:

答案 0 :(得分:4)

尝试在json转储中应用str.format是一个注定的想法,原因有几个,主要原因是字符串转储的封闭{}冲突/丢失了格式。< / p>

我建议事先用命名字段预处理字典:

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()}

Pre-python 2.7语法(dict comprehensions尚不可用):

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()}