2016-03-23 2 views
-1

Что лучший способ проверить каждое значение в словаре с вне использования внешних библиотекPython: Проверка каждого значения в словаре

for example dict = {"A":"some_string", 
        "B":12, 
        "C":83, 
        "D":56.......so on} 

Я должен проверить, что если ключ A того значение должно быть string и если ключ B, то значение должно быть int и составляет от 1 to 20 , если ключ C то значение должно быть int и находится в диапазоне от 1 до 100 так, на основе ключа, проверка значений также изменяется ...

любой более короткий способ сделать это? мой размер словаря огромен

+2

Сколько здесь ключей? И у вас есть какая-либо закономерность между соответствующими требованиями к стоимости? – niyasc

+1

Откуда взялись эти правила? Без этого, это не очень четко заданный вопрос. –

+2

создайте еще один словарь с ключом, отображаемым для функций проверки, и используйте что-то вроде 'validations [key] (value)' – Bahrom

ответ

4

Вот подход с другой словарь:

d = {"A":"some_string", 
    "B":12, 
    "C":83, 
    "D":56} 

# Map your validation functions to the keys 
validations = { 
    "A": lambda x: isinstance(x, str), 
    "B": lambda x: isinstance(x, int) and 1 <= x <= 20, 
    "C": lambda x: isinstance(x, int) and 1 <= x <= 100, 
} 

for k, v in d.items(): 
    print(validations.get(k, lambda x: False)(v)) # Default validation just returns False (invalid) 

Чтобы проверить, действительно ли в словаре, вы можете использовать:

print(all(validations.get(k, lambda x: False)(v) for (k, v) in d.items())) 
0

Давайте предположим, что вы определили ожидаемые типы в словаре:

typeExpected = {'A':str, 'B':int} 

означает, что ключ А должен содержать string и ключ B должен содержать int. Давайте определим словарь, который вы хотите проверить, как:

exampleData = {'A':'ok', 'B':0} 

Теперь вы можете проверить правильность типов, выполнив:

map(lambda x: type(exampleData[x]) == typeExpected[x], exampleData) 

Попробуйте это на ваших данных, и если ваш словарь действительно слишком велик, это было бы легко преобразовать карту в pool.map для работы в многопроцессорной обработке.

Смежные вопросы