Django: Проверить есть ли значение среди ключей choices
Есть такой список разрешённых значений
choices_vars = (
('key1', 'val1'),
('key2', 'val2'),
('key3', 'val3')
)
Как проверить, что полученный от пользователя ключ user_key есть среди ключей key1,key2,key3? Могу перебрать массив, и проверить каждый ключ, но наверняка есть уже какое-то хорошее решение.
Ответы (2 шт):
Можно получить список n-ных элементов каждого подсписка при помощи конструкции:
list(zip(*choices_vars))[n]
# для n=0 вернёт ('key1', 'key2', 'key3')
# для n=1 вернёт ('val1', 'val2', 'val3')
# и т.д.
Ну а дальше банальный if ... in ...:
if 'key2' in list(zip(*choices_vars))[0]:
...
if user_key in list(zip(*choices_vars))[1]:
...
Хотя я не очень понял, что такое user_key и в каких значениях вы собрались его искать. Но, думаю, смысл понятен.
По моему можно проще:
choices_vars = (
('key1', 'val1'),
('key2', 'val2'),
('key3', 'val3')
)
# функция для проверки возвращет только True при совпадении
def check(key, vars):
for i in vars:
if key in i: return True
Ну, а теперь проверим:
>>> check("key1", choices_vars)
True
>>> check("key", choices_vars) # ничего не происходит
Перечитал еще раз вопрос и могу предположить, что значения key скорей всего уникальны. Это так? Если мое предположение верно, тогда лучше использовать словарь. Наподобие такого:
choices_vars = {'key1': 'val1',
'key2': 'val2',
'key3':'val3'}
смысл - это хранение уникальных значений ключей. А, поиск по ключам примерно также:
>>> "key1" in choices_vars.keys()
True