Python Schematics - тип Dict с несколькими типами значений - PullRequest
0 голосов
/ 04 октября 2018

Отказ от ответственности: я супер нуб в Python, поэтому, пожалуйста, будьте терпеливы.

Я даже не уверен, возможно ли это вообще, но мы используем Schematics для проверки данных в Python, и мы имеемсписок словарей, которые могут иметь значения нескольких типов (например, список строк, список чисел, список словарей и т. д.). Поэтому моей первой попыткой было использование 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, но это не слишком далеко зашло.

Заранее спасибо!

1 Ответ

0 голосов
/ 04 октября 2018

Вы говорите, что у вас есть словарь с несколькими типами ключей.В 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'}
}

Однако вы утверждаете, что ваши ключи являются списками других значений.Поскольку список является изменяемым, его нельзя использовать в качестве ключа в dict:

my_dict[[1,2]]='coords'
TypeError: unhashable type: 'list'

Решение будет состоять в том, чтобы преобразовать ключи списка в ключи кортежа, как в моем третьем примере выше,аналогично структурированный, но неизменный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...