【问题标题】:KeyError in .format() python 2.6.format() python 2.6中的KeyError
【发布时间】:2018-10-10 07:42:54
【问题描述】:

我尝试使用变量 typesource string format {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"'

【问题讨论】:

  • 你对你的代码有什么期望?
  • 它不起作用,因为json 添加了封闭的花括号。你到底想达到什么目标?
  • 将 {0} 替换为 type,将 {1} 替换为 source

标签: python json python-2.7 string-formatting


【解决方案1】:

尝试在 json 转储中应用 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()}

pre-python 2.7 语法(字典推导尚不可用):

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

字典理解将参数应用于所有记录,这些记录会选择他们需要的记录。然后你可以转储那个版本的字典。

基于 dict 的变体(当有很多变量时会很方便)是:

fd = dict(type="Test",source="Source")
new_data = {k:v.format(**fd) for k,v in data.items()}

【讨论】:

  • 我尝试在没有 json 转储的情况下进行 string.format,但随后出现无法格式化字典的错误
  • 是的,您必须重建字典,应用每个键/值对的格式
  • 我的代码出错:` 文件“test.py”,第 11 行 new_data = {k:v.format(type=type,source=source) for k,v in data.items ()} ^ SyntaxError: 无效语法 `
  • 哦,好的,现在它可以工作了,你能否也为 2.6 更新基于 dict 的变体? new_data = {k:v.format(**fd) for k,v in data.items()}
  • 试试 dict((k,v.format(**d)) for k,v in data.items()) 但我没有 python 2.6 来检查它是否有效。
猜你喜欢
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多