Как получить значения из словаря

Я только изучаю пайтон, мог не верно написать заголовок вопроса. Извините, если это так.

Делаю бота. Я 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 шт):

Автор решения: Shamus Rezol

Я работаю над похожим проектом, но мне приходится иметь дело с куда более катастрофически плохо оформленными входными данными, чем у вас. Мне приходится разбирать стандарт на 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] Н/Б
→ Ссылка