【发布时间】:2019-03-02 05:28:04
【问题描述】:
我想将对象的类型用作字典键,最好将此类字典序列化为 JSON 字符串。可以对其进行反序列化,然后使用简单的“if SomeType in SomeDictionary”检查。
演示问题的最小代码示例:
import json
class Cat():
def __init__(self, name):
self.name = name
class Dog():
def __init__(self, name):
self.name = name
pets = dict()
pets[Cat] = Cat("Tom")
pets[Dog] = Dog("Rex")
print(pets.keys())
print(json.dumps(pets))
我得到错误:
dict_keys([<class '__main__.Cat'>, <class '__main__.Dog'>])
Traceback (most recent call last):
File "python", line 17, in <module>
TypeError: keys must be a string
第17行表示带有“print(json.dumps(pets))”的行。
是否可以在 Python 中实现这样的行为?
【问题讨论】:
-
您收到错误消息,因为您违反了不能包含 Python 对象的 JSON 格式。如果您想稍后反序列化您的对象,您应该使用适当的序列化库,例如
pickle或dill。 -
为了使用来自 JSON 的
if SomeType in SomeDictionary",那么“某种类型”只能是一个字符串,这就是错误告诉你的......你正在尝试将一个类定义放入键,不是字符串 -
@EliKorvigo 是的,我明白这一点,我正在寻找如何解决它的解决方案。我试过泡菜,结果相同。
标签: python json serialization