#python #json
#python #json
Вопрос:
Привет!
Вопрос: Мне интересно, как использовать понимание списка для фильтрации определенных результатов на основе слова в списке python или каким-либо другим способом извлекать из списка только те строки, которые мне нужны, которые содержат определенное «ключевое слово».
Обзор: Я использую python для отправки запроса к api и получил запрос json. Я преобразовал json с помощью json.loads() и теперь у меня есть вложенный список python, с которым я пытаюсь работать:
{"results": [
{
**"id": 12345678,**
"applicant": {
"id": 11342542,
"first_name": "Mary",
"last_name": "Johnson",
"email": "mjohnson@example.org"
},
"average_score": 42.0,
"collaborators": [],
"created_at": "2020-06-02T*****",
"current_stage": {
"id": 5057743,
"title": "Reviewing"
},
"custom_fields": [],
"decision": null,
**"labels": [
{
"id": 1124354,
"name": "Jerusalem"
},
{
"id": 132456,
"name": "Testing Stuff"
}],**
"notes": [
{
"id": 536590,
"author": {
"id": 3342356287,
"first_name": "Brett",
"last_name": "Wallace",
"email": "bwallace@example.com"
},
"author_role": 2,
"content": "This is a sly one.",
"edited": false,
"created_at": "2020-06-03T15:28:19",
"is_private": false,
"updated_at": "2020-06-03T15:28:19"
}
],
"organization": null,
"overall_score": 45.0,
"program": {
"id": 23476343,
"name": "Test 2"
},
},
{
**"id": 112334435,**
"applicant": {
"id": 113560732,
"first_name": "Steve",
"last_name": "Henderson",
"email": "shenderson@example.com"
},
"average_score": 61.0,
"collaborators": [],
"created_at": "2020-06-02T19:44:44",
"current_stage": {
"id": 549284389,
"title": "Registration"
},
"custom_fields": [],
"decision": null,
**"labels": [
{
"id": 23423,
"name": "Nazareth"
},
{
"id": 239843,
"name": "Age Requirements"
}
],**
"notes": [],
"organization": null,
"overall_score": 61.0,
"program": {
"id": 223432,
"name": "Test 2"
},
"reference_id": "SPR21-2260071923",
"state": 0,
"status": {
"id": 20943893,
"name": "Accepted"
},
"title": "SPR21-2260071923",
"updated_at": "2020-09-14T02:16:51",
"weighted_score": 61.0,
"last_submitted_at": "2020-06-03T16:44:26"
},
}
Я могу извлечь только те поля, которые мне нужны, используя следующий код:
for application in r['results']:
print(application['id'],application['labels'])
Я получаю что-то похожее на это:
18318202 [{'id': 109135, 'name': 'Jerusalem'}, {'id': 109198, 'name': 'Testing Stuff'}]
11233443 [{'id': 109135, 'name': 'Nazareth'}, {'id': 109198, 'name': 'Age Requirement'}]
Есть ли способ для меня возвращать значения только с «Иерусалимом» в поле [‘labels’]? Другими словами, если посмотреть на приведенный выше пример, он вернет только первую строку, поскольку вторая строка не содержит слова Jerusalem. Я согласен либо фильтровать эту информацию из данных (оператор условной печати), либо извлекать ее в новый список, но я не могу понять, как получить только те значения, которые содержат в них «Иерусалим». Все ресурсы, которые я нашел, рассказывают о том, как загружать и преобразовывать данные, но не отфильтровывать их после факта..Заранее спасибо за чье-либо время и поддержку!!
Ответ №1:
filtered_data = [(application['id'], application['labels']) for application in
r['results'] if 'Jerusalem' in
(item['name'] for item in application['labels'])]
вероятно, это тоже сработает
filtered_data = [(application['id'], application['labels']) for application in
r['results'] if application['labels'][0]['name'] == 'Jerusalem']
Комментарии:
1. Я не знаю, кто вы, я не знаю, чего вы хотите… Если вы ищете деньги, я могу сказать вам, что у меня нет денег, но то, что у меня есть, — это ПОХВАЛА и лучший ответ. Большое ВАМ спасибо, если бы я мог только выразить словами, как сильно вы мне помогли, это было бы больше похоже на картинку, чем на слова!! Ты потрясающий. Это сработало!! Я пробовал что-то подобное, но не включал элемент [‘name’] . Еще раз спасибо!!
2. ТАК что дело не в деньгах, а в сообществе. Мы делимся знаниями и помогаем коллегам-программистам