免责声明:我是Python的超级菜鸟,请耐心等待。
我什至不确定这是否完全可行,但是我们正在使用Schematics在Python中进行数据验证,并且我们有一系列字典,这些字典可以具有多种类型的值(例如,字符串列表,数字列表,词典列表等。)所以我的第一次尝试是使用联合体类型。
现在,该模型如下所示:
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,但这也没有飞得太远。
提前谢谢!
答案 0 :(得分:0)
您说您有一本具有多种键类型的字典。在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'
解决方案是将列表键转换为元组键,如上面的第3个示例中所示,它们的结构相似但不可变