我想使用对象的类型作为字典键,可以将这样的字典序列化为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中实现此类行为?
替代方案
pets = {"Tom" : Cat("Tom"), "Rex" : Dog("Rex")}
print(pets.keys())
print(json.dumps(pets))
最后,没有办法在没有循环所有值的情况下说“字典中是否有猫或狗”
你可以试试这个:
import json
class Cat():
def __init__(self, name):
self.name = name
class Dog():
def __init__(self, name):
self.name = name
pets = dict()
pets[str(Cat)] = Cat("Tom").__dict__ #he can get the value using pets[str(Cat)] or pets.get(str(Cat),None))
pets[str(Dog)] = Dog("Rex").__dict__
print(pets.keys())
print(json.dumps(pets))