Существует ли более питонический способ проверки ключей в упорядоченном словаре в Django
тип данных
<class 'collections.OrderedDict'>
if("a" not in data or "b" not in data or "c" not in data or
"d" not in data or "e" not in data or "f" not in data or
"g" not in data or "h" not in data or "i" not in data):
raise serializers.ValidationError("All Required Parameters not provided")
я проверяю все эти параметры, присутствуют ли они в моем упорядоченном словаре или нет, есть ли лучший способ проверить это?
Вы можете это сделать,
if any(i not in data for i in list('abcdefghijkli')):
raise serializers.ValidationError("All Required Parameters not provided")
list('abcdefghijkli')
-> ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'i']
. Вы также можете использовать весь список, если у вас есть набор ключей для проверки. например, так,
if any(i not in data for i in ['key_1', 'key_2'. 'key_3']):
raise serializers.ValidationError("All Required Parameters not provided")
Исполнение:
In [1]: d
Out[1]: defaultdict(None, {'1': None, '2': None, 'c': None})
In [2]: any(i not in data for i in list('abcdefghijkli'))
Out[2]: True
Вы можете использовать set
s для определения принадлежности:
def has_required_keys(data, required_keys):
return len(set(data.keys()) & set(required_keys)) == len(required_keys)