Python 原理图 - 具有多种值类型的字典类型

问题描述 投票:0回答:1

免责声明:我是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 python-3.x schema
1个回答
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'

解决方案是将列表键转换为元组键,如上面的第三个示例所示,它们的结构类似但不可变

© www.soinside.com 2019 - 2024. All rights reserved.