Как получить значения из словаря
Я только изучаю пайтон, мог не верно написать заголовок вопроса. Извините, если это так.
Делаю бота. Я API методом получил вот такой словарь: https://pastebin.com/UQDs2uef
Мне надо написать метод, который принимает название группы и день недели и в результате получается (на примере группы 1ПД-9-1 первого дня недели):
1. Пара 09:30-10:30 | 2 подгруппа, ауд. 412
2. Пара 11:00-12:30 | 2 подгруппа, ауд. 412
3. Пара 12:40-14:00 | 2 подгруппа, ауд. 412
4. Пара (изменения) / пара (по расписанию) 13:30-15:00 | ауд. 301
7. Пара 19:00-20:30 | 2 подгруппа, ауд. 310
Там, где 4 пара, информация берется из списка akScheduleReplaces (смотрите код)
Я никак не могу понять, как перебирать в цикле такой словарь и особенно, как получить значение для замены в нужном месте
Ответы (1 шт):
Я работаю над похожим проектом, но мне приходится иметь дело с куда более катастрофически плохо оформленными входными данными, чем у вас. Мне приходится разбирать стандарт на 5к страниц только чтобы он был на уровне "в большинстве случаях он сработает правильно". По-моему вы просто плохо старались разобраться сами.
Демо
# @name __init__.py
from ed126f491e2c4bce9c63134f29e1762d import data
class DAY_OF_WEEK(object):
'''Перечисление эквивалентов дней недели в API.'''
MO = "1"
TU = "2"
WE = "3"
TH = "4"
FR = "5"
SA = "6"
# SU = ""
def Process(group: str, dayofweek: str):
'''Получает информацию об расписании.
Param group Имя запрашиваемой группы.
Param dayofweek День недели. Перечислены в DAY_OF_WEEK.
Возвращает кортеж строковых значений (employment, time).
'''
global data # list
result = list()
for item in data:
if not "group" in item.keys():
continue
if item["group"] != group:
continue
if not "akScheduleLessons" in item.keys():
continue
time = ""
for lesson in item["akScheduleLessons"]:
if not "employment" in lesson.keys() or not "time" in lesson.keys():
continue
employment = lesson["employment"]
_time = lesson["time"]
if len(_time) > 0:
time = _time
result.append((employment, time))
return result
if __name__ == "__main__":
retr = Process("1ГД-9", DAY_OF_WEEK.MO)
if len(retr) > 0:
for no, item in enumerate(retr, 1):
employment, time = item
print(f"{no}. [{time}] {employment}")
else:
print("Информация о расписании отсутствует.")
Я также заметил, что time объявляется только один раз. В демке я допустил, что он должен повторяться.
Вывод
1. [08:00-09:30] Учебное занятие
2. [08:00-09:30] Учебное занятие
3. [08:00-09:30] Учебное занятие
4. [08:00-09:30] Учебное занятие
5. [08:00-09:30] Учебное занятие
6. [08:00-09:30] Учебное занятие
7. [08:00-09:30] Учебное занятие
8. [08:00-09:30] Учебное занятие
9. [08:00-09:30] Учебное занятие
10. [08:00-09:30] Учебное занятие
11. [08:00-09:30] Учебное занятие
12. [08:00-09:30] Учебное занятие
13. [08:00-09:30] Учебное занятие
14. [08:00-09:30] Учебное занятие
15. [08:00-09:30] Учебное занятие
16. [08:00-09:30] Учебное занятие
17. [08:00-09:30] Учебное занятие
18. [08:00-09:30] Н/Б