Требуется преобразовать список картежей в словарь заданного формат

Условие: есть список кортежей, который выгружается из mssql c использованием pyodbc. В этом списке есть отметки, о времени выхода артиста на определенную сцену (zone_id, zone_name)

#                 datetime, id_req, id_p, id_zon, name_zone,   , surname,  name,      , middle name,     id_comapany, name_company, job title
pyodbc_respons =[(datetime(2023, 3, 5, 20, 56, 9), 948358, 2523, 3, 'Сцена 3','Пугачёва', 'Алла', '-----', 50, 'министерство культуры ссср', 'Певица'),
                 (datetime(2023, 3, 5, 7, 45, 12), 941742, 608, 1, 'Сцена 1', 'Галкин', 'Максим', '-----', 7, 'министерство культуры РФ', 'Артист'), 
                 (datetime(2023, 3, 5, 7, 30, 36), 941114, 2830, 1, 'Сцена 1','Орбакайте', 'Кристина', '----', 22, 'министерство культуры РФ', 'Артист'), 
                 (datetime(2023, 3, 5, 19, 36, 56), 947573, 2643, 3, 'Сцена 3', 'Билан', 'Дмитрий', '----', 6, 'министерство культуры РФ', 'Артист'), 
                 (datetime(2023, 3, 5, 14, 14, 15), 946119, 2601, 3, 'Сцена 3','Шнуров', 'Сергей', '------', 50, 'министерство культуры РФ', 'Шоумен')]

Требуется посчитать общее количество звезд на сцене согласно этого списки и вывести ответ в следующем формате:

dict_list = {  "company": [
    {
      "name": "министерство культуры СССР",
      "items": [
        {
          "position": "Певица",
          "peopleInArea": [
            {
              "zoneId": 3,
              "amount": 1  # сумма Певица
            }
          ]
        }
      ]
    },
    {
      "name": "министерство культуры РФ",
      "items": [
        {
          "position": "Артист",
          "peopleInArea": [
            {
              "zoneId": 1,  # на какой сцене выступает 
              "amount": 2   # сумма  Галкин + Орбакайте
            },
            {
              "zoneId": 3, # на какой сцене выступает 
              "amount": 1  # Билан
            }
          ]
        },
        {
          "position": "Шоумен",
          "peopleInArea": [
            {
              "zoneId": 3,  # на какой сцене выступает 
              "amount": 1   # Шнуров
            }
          ]
        }
      ]
    }
  ]}

Я новичок. Делал через циклы и для каждого вложения использовал новый цикл. Понимаю что скорее всего тут как-то по другому сделать, но не могу понять как((( у меня таких записей 30к а циклов штук 10 выходит. То есть 30*10=300к обрабатываю строки.... Подскажите пожалуйста как быть?


Ответы (0 шт):