#python #json
#python #json
Вопрос:
Я относительно новичок в программировании, извините, у меня уже был ответ на этот вопрос.
Я пытаюсь получить конкретное значение из JSON, которое я получил от API. JSON выглядит так после того, как я вставил вкладку в первый {} и сохранил его в список.
Теперь мне нужно извлечь все значения «term». Перепробовал много подходов, но я не смог найти правильный подход к нему.
[
[
{
'id': 292,
'categories': [
],
'terms': [
{
'term': 'Erprobung'
},
{
'term': 'Probe'
},
{
'term': 'Prüfung'
},
{
'term': 'Test'
},
{
'term': 'Versuch'
}
]
},
{
'id': 4398,
'categories': [
],
'terms': [
{
'term': 'Leistungsnachweis'
},
{
'term': 'Prüfung'
},
{
'term': 'Test'
}
]
},
{
'id': 5752,
'categories': [
],
'terms': [
{
'term': 'Klassenarbeit'
},
{
'term': 'Klausur'
},
{
'term': 'Leistungsüberprüfung'
},
{
'term': 'Lernerfolgskontrolle'
},
{
'term': 'Prüfung'
},
{
'term': 'Schularbeit'
},
{
'term': 'Schulaufgabe'
},
{
'term': 'Test'
},
{
'term': 'Arbeit',
'level': 'umgangssprachlich'
}
]
},
{
'id': 9138,
'categories': [
],
'terms': [
{
'term': 'Experiment'
},
{
'term': '(die) Probe aufs Exempel'
},
{
'term': 'Probelauf'
},
{
'term': 'Studie'
},
{
'term': 'Test'
},
{
'term': 'Testballon'
},
{
'term': 'Testlauf'
},
{
'term': 'Trockenlauf'
},
{
'term': 'Trockentest'
},
{
'term': 'Versuch'
},
{
'term': 'Versuchsballon'
}
]
},
{
'id': 6241,
'categories': [
],
'terms': [
{
'term': 'Bewährungsprobe'
},
{
'term': 'Feuerprobe'
},
{
'term': 'Feuertaufe'
},
{
'term': 'harte Prüfung'
},
{
'term': 'Lackmustest'
},
{
'term': 'Nagelprobe'
},
{
'term': 'Test'
}
]
}
]
]
Комментарии:
1. Добро пожаловать в SO! «Перепробовал много подходов, но я не смог найти для этого правильный подход». Не могли бы вы поделиться некоторыми из них?
2. Я должен быть честным, я удалил подход и startet из scrach. Я пробовал смесь циклов for и while. С помощью нового подхода я решил свою проблему. Тем не менее, спасибо вам и спасибо за теплый прием!
Ответ №1:
Самый простой способ — использовать понимание вложенного списка:
>>> [term_dict["term"] for d in my_list for term_dict in d["terms"]]
['Erprobung', 'Probe', 'Prüfung', 'Test', 'Versuch', 'Leistungsnachweis',
'Prüfung', 'Test', 'Klassenarbeit', 'Klausur', 'Leistungsüberprüfung',
'Lernerfolgskontrolle', 'Prüfung', 'Schularbeit', 'Schulaufgabe', 'Test',
'Arbeit', 'Experiment', '(die) Probe aufs Exempel', 'Probelauf', 'Studie',
'Test', 'Testballon', 'Testlauf', 'Trockenlauf', 'Trockentest', 'Versuch',
'Versuchsballon', 'Bewährungsprobe', 'Feuerprobe', 'Feuertaufe', 'harte Prüfung',
'Lackmustest', 'Nagelprobe', 'Test']
Комментарии:
1. Привет, Сельчук, спасибо за вашу помощь. К сожалению, попытка вашего подхода дает мне
TypeError: list indices must be integers or slices, not str
После попытки нового подхода я все равно заставил его работать. Все еще благодарю вас за вашу помощь!
Ответ №2:
Что ж, после запуска из scrach я решил свою проблему.
new_list = []
for list_num in synonym_call:
# ic(len(list_num))
# ic(list_num[ITERATE TROUGH HERE]["terms"])
# ic(list_num[len(list_num) - 1]["terms"])
list_length = len(list_num) - 1
while list_length > 0:
new_list.extend(list_num[list_length - 1]["terms"])
list_length -= 1
synonym_list = []
for term in new_list:
synonym_list.append(term["term"])
print(synonym_list)
И это результат:
['Experiment', '(die) Probe aufs Exempel', 'Probelauf', 'Studie', 'Test', 'Testballon', 'Testlauf', 'Trockenlauf', 'Trockentest', 'Versuch', 'Versuchsballon', 'Klassenarbeit', 'Klausur', 'Leistungsüberprüfung', 'Lernerfolgskontrolle', 'Prüfung', 'Schularbeit', 'Schulaufgabe', 'Test', 'Arbeit', 'Leistungsnachweis', 'Prüfung', 'Test', 'Erprobung', 'Probe', 'Prüfung', 'Test', 'Versuch']
Я почти уверен, что есть еще более простой подход к нему, но пока он работает, и я более чем доволен им!
Спасибо всем за вашу помощь!