用 JSON 序列化字典
Serializing Dictionary with JSON
所以我正在尝试 JSON 转储从 Python 中处理的 CSV 创建的字典。
创建字典的方法:
def createUUIDDocIDLink(path):
dict = defaultdict
with open(path) as citTSV:
header = 0
for line in csv.reader(citTSV, dialect = "excel-tab"):
if header > 0 and line[1] not in dict:
dict[line[1]] = [line[0]]
elif header > 0 and line[1] in dict:
dict[line[1]].append(line[0])
header += 1
return dict
字典转储方法:
def dumpCreateUUIDDocIDLink():
with open("D:/Coding/FE_InOut/dumpUUIDDocIDLookup",'w') as ULookup:
output = json.dump(createUUIDDocIDLink("D:/Coding/FE_InOut/ipcr.tsv"),ULookup)
return output
我收到的错误是:
"raise TypeError(repr(o) + " 不是 JSON 可序列化")
类型错误:class 'collections.defaultdict' 不是 JSON 可序列化的
我哪里错了?为什么我不能将这个字典存储在内存中?有人有我可以使用的解决方法吗?
非常感谢您的宝贵时间和帮助,
如果需要进一步说明,请告诉我。
这一行:
dict = defaultdict
错了。要声明包含列表的 defaultdict,您必须编写:
dict = defaultdict(list)
但无论如何您都不需要 deafultdict,因为您自己负责初始化。我也不会使用 dict
作为变量名,所以我只是将这一行替换为:
mydict = {}
并确保所有引用 dict
的命令现在都引用 mydict
。
所以我正在尝试 JSON 转储从 Python 中处理的 CSV 创建的字典。
创建字典的方法:
def createUUIDDocIDLink(path):
dict = defaultdict
with open(path) as citTSV:
header = 0
for line in csv.reader(citTSV, dialect = "excel-tab"):
if header > 0 and line[1] not in dict:
dict[line[1]] = [line[0]]
elif header > 0 and line[1] in dict:
dict[line[1]].append(line[0])
header += 1
return dict
字典转储方法:
def dumpCreateUUIDDocIDLink():
with open("D:/Coding/FE_InOut/dumpUUIDDocIDLookup",'w') as ULookup:
output = json.dump(createUUIDDocIDLink("D:/Coding/FE_InOut/ipcr.tsv"),ULookup)
return output
我收到的错误是:
"raise TypeError(repr(o) + " 不是 JSON 可序列化")
类型错误:class 'collections.defaultdict' 不是 JSON 可序列化的
我哪里错了?为什么我不能将这个字典存储在内存中?有人有我可以使用的解决方法吗?
非常感谢您的宝贵时间和帮助, 如果需要进一步说明,请告诉我。
这一行:
dict = defaultdict
错了。要声明包含列表的 defaultdict,您必须编写:
dict = defaultdict(list)
但无论如何您都不需要 deafultdict,因为您自己负责初始化。我也不会使用 dict
作为变量名,所以我只是将这一行替换为:
mydict = {}
并确保所有引用 dict
的命令现在都引用 mydict
。