Python Schematics-具有多个值类型的Dict类型

时间:2018-10-04 19:00:03

标签: python python-3.x schema

免责声明:我是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,但这也没有飞得太远。

提前谢谢!

1 个答案:

答案 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个示例中所示,它们的结构相似但不可变