免责声明:我是Python超级菜鸟,所以请耐心等待。
我什至不确定这是否可行,但我们在 Python 中使用 Schematics 进行数据验证,并且我们有一个可以包含多种类型值的字典列表(例如字符串列表、数字列表、字典等)所以我的第一次尝试是使用 Union Type。
现在,模型看起来像这样:
class Filter(Model):
_id = ObjectIdType(default=ObjectId)
name = StringType()
filters = ListType(DictType(UnionType([ListType(StringType()),
ListType(NumberType()),BooleanType(), StringType()])))
created_at = DateTimeType(default=datetime.datetime.now)
updated_at = DateTimeType(default=datetime.datetime.now)
但是由于某种未知的原因, isinstance() 给了我一个错误,即 arg 2 必须是类型或类型元组(我有一种感觉意味着只有 2 种类型可以统一)。所以我有点没有想法。我尝试编写一个自定义模型并使用 ModelType,但这也没有走得太远。
提前谢谢您!
你说你有一本有多种键类型的字典。在 python 中,只要键是可散列的,键的类型并不重要。这意味着以下内容是完全可以接受的:
my_dict={}
my_dict[1]=[1,2,3]
my_dict['s']='hello'
my_dict[(0,2)]={'a':1,2:'b'}
print(my_dict)
{1: [1, 2, 3],
's': 'hello',
(0, 2): {'a': 1, 2: 'b'}
}
但是,您声明您的键是其他值的列表。因为列表是可变的,所以它不能用作字典中的键:
my_dict[[1,2]]='coords'
TypeError: unhashable type: 'list'
解决方案是将列表键转换为元组键,如上面的第三个示例所示,它们的结构类似但不可变