下面的代码定义了一个用于转换字段值的字典。读取数据,根据该字典转换一些值,然后将其写入表中。它按原样工作。问题是,我现在想将此配置移到 .py 文件之外到 JSON 配置文件中。
lookups = {
11: {
"ST1": ["ABC"],
"UNK01": ["125", "ACD"],
"A": ["52"],
"B": ["91"],
"C": ["92"],
"D": ["95"]
},
10: {
"XYZ01": ["91"],
"XYZ02": ["83"],
"XYZ03": ["27"]
}
}
根据 jsonlint.com,为了使分配给 lookups
的上述值成为有效的 JSON,我必须引用 11
和 10
键。这样做会破坏我的 Python 代码并显示 TypeError: listIndexsmust beintegers, not str
.
如何创建有效的 JSON 并最大限度地减少对代码的更改?
最佳答案
如果你想将其转储到 json 文件:
import json
with open("config.json","w") as f:
json.dump(lookups, f) # dump dict to file
with open("config.json") as f:
s = json.load(f) # load dict from file
print(s)
{'11': {'ST1': ['ABC'], 'A': ['52'], 'D': ['95'], 'UNK01': ['125', 'ACD'], 'B': ['91'], 'C': ['92']}, '10': {'XYZ01': ['91'], 'XYZ03': ['27'], 'XYZ02': ['83']}}
如果您需要将键作为整数,您可以循环并强制转换为整数或使用pickle
:
import pickle
with open("in.pkl","wb") as f:
pickle.dump(lookups, f)
with open("in.pkl","rb") as f:
s = pickle.load(f)
print(s)
{10: {'XYZ03': ['27'], 'XYZ01': ['91'], 'XYZ02': ['83']}, 11: {'UNK01': ['125', 'ACD'], 'B': ['91'], 'D': ['95'], 'ST1': ['ABC'], 'C': ['92'], 'A': ['52']}}
如果不按原样使用。
关于python - 如何序列化/反序列化这个实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28374656/