Как сопоставить значения списка и переменной?
У меня есть большой JSON файл с часто задаваемыми вопросами. Структура такая:
язык интерфейса ==> категория ==> вопрос
Получается пока так:
if request in FAQs[c['from']['language_code']].values()
Но строка
if request in FAQs[c['from']['language_code']].values()
возвращает такой список
[{'Вопрос 1': 'Ответ 1', 'Вопрос 2': 'Ответ 2', 'Вопрос 3': 'Ответ 3'}, {'Вопрос 4': 'Ответ 4', 'Вопрос 5': 'Ответ 5', 'Вопрос 6': 'Ответ 6'}, {'Вопрос 7': 'Ответ 7', 'Вопрос 8': 'Ответ 8', 'Вопрос 9': 'Ответ 9'}]
Необходимо сравнить request с вопросами (Вопрос 1, Вопрос 2 и т.д.).
Это возможно?
Чтобы интерпретатор как бы проверял сразу во всех словарях (элементах списка list(FAQs[c['from']['language_code']].values())) значение полученное от пользователя, и говорил существует ли такой вопрос.
Ответы (2 шт):
Если я понял задачу правильно, то примерно так можно проверить, наличествует ли строка request в каком-то вопросе или ответе и вывести эту пару вопрос-ответ, если задан список из нескольких словарей формата вопрос-ответ:
qa_list = [
{'Вопрос 1': 'Ответ 1', 'Вопрос 2': 'Ответ 2', 'Вопрос 3': 'Ответ 3'},
{'Вопрос 4': 'Ответ 4', 'Вопрос 5': 'Ответ 5', 'Вопрос 6': 'Ответ 6'},
{'Вопрос 7': 'Ответ 7', 'Вопрос 8': 'Ответ 8', 'Вопрос 9': 'Ответ 9'}
]
request = 'Вопрос 5'
for d in qa_list:
for k,v in d.items():
if request in k or request in v:
print(k, v)
Вывод:
Вопрос 5 Ответ 5
Можно воспользоваться модулем dpath для поиска в словарях любой степени вложенности:
In [8]: import dpath.util as dpu
In [9]: data = {'Категория 1': {'Вопрос 1': 'Ответ 1', 'Вопрос 2': 'Ответ 2', 'Вопрос 3': 'Ответ 3', 'Вопрос 4': 'Ответ 4', 'Вопрос 5': 'Ответ 5'}, 'Категория 2': {'Вопрос 6
...: ': 'Ответ 6', 'Вопрос 7': 'Ответ 7', 'Вопрос 8': 'Ответ 8', 'Вопрос 9': 'Ответ 9', 'Вопрос 10': 'Ответ 10'}, 'Категория 3': {'Вопрос 11': 'Ответ 11', 'Вопрос 12': 'О
...: твет 12', 'Вопрос 13': 'Ответ 13', 'Вопрос 14': 'Ответ 14', 'Вопрос 15': 'Ответ 15'}}
In [10]: q = 'Вопрос 10'
In [11]: dpu.values(data, f"/**/{q}")
Out[11]: ['Ответ 10']
In [12]: dpu.values(data, f"/**/BLAH-BLAH-BLAH")
Out[12]: []
если нужен полный путь:
In [13]: dpu.search(data, f"/**/{q}")
Out[13]: {'Категория 2': {'Вопрос 10': 'Ответ 10'}}