Как сопоставить значения списка и переменной?

У меня есть большой 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 шт):

Автор решения: CrazyElf

Если я понял задачу правильно, то примерно так можно проверить, наличествует ли строка 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
→ Ссылка
Автор решения: MaxU

Можно воспользоваться модулем 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'}}
→ Ссылка