Использование шаблона Tuple of Tuples

У меня есть скрипт, который делает вызов БД, а затем возвращает результаты в виде кортежа. Вызов БД отслеживает данные в формате год-к-месяц, месяц-дата и неделя-дата.

Из-за нового финансового года я больше не получаю данные по некоторым годам для некоторых элементов, как ожидалось, но мне нужно создать запись в кортеже, если БД ничего не возвращала, поэтому в итоговой таблице будут отображаться все места и напишите ноль, если ничего не вернулось.

Вот что у меня есть:

def Main():
    template = (('ham', '0905', 0), ('Wind', '852', 0), ('Wash', '3292', 0), ('Chitt', '3367', 0))
    yr = sql_fin('year')
    yr = db_query(yr)  # Yearly Data Returned Here
    print("YEAR: {} ".format(yr))
    if yr:
        pass
    else:
        yr = template

    if len(yr) < len(template):
        for each in yr:
            for part in template:
                if each[0] == part[0]:
                    pass
                else:
                    yr = yr + (part,)
    else:
        pass

    mnth = sql_fin('month')
    mnth = db_query(mnth)  # Monthly Data Returned Here
    print("MONTH: {} ".format(mnth))

    wk = sql_fin('week')
    wk = db_query(wk)  # Weekly Data Returned Here
    print("WEEK: {} ".format(wk))

    data = {(name, n): [y, 0, 0] for name, n, y in yr}

    print("DATA:".format(data))
    for name, n, m in mnth:
        data[name, n][1] = m

    for name, n, w in wk:
        data[name, n][2] = w

    data = tuple(tuple([*k, *v]) for k, v in data.items())

    print("DATA: {}".format(data))
    return data

Я пытался добавить шаблон по умолчанию, но у меня это не получалось. Теперь поступают другие цифры (ежемесячные и еженедельные), но все годовые данные обнуляются.

Что я не вижу??

По сравнению с шаблоном, если что-то подобное вернулось:

(('ham', '0905', 3), ('Wind', '852', 4))

Как я могу гарантировать, что другие записи делают это без изменения данных

1 ответ

Решение

Вы можете сделать это, используя defaultdict

from collections import defaultdict

def Main():
    yr_dict = defaultdict(int)
    template = (('ham', '0905'), ('Wind', '852'), ('Wash', '3292'), ('Chitt', '3367'))

    yr = sql_fin('year')
    yr = db_query(yr)  # Yearly Data Returned Here
    print("YEAR: {} ".format(yr))

    for a, b, c in yr:
        yr_dict[a + ":" + b] = c

    yr = tuple((a, b, yr_dict[a + ":" + b]) for a, b in template)

    mnth = sql_fin('month')
    mnth = db_query(mnth)  # Monthly Data Returned Here
    print("MONTH: {} ".format(mnth))

    wk = sql_fin('week')
    wk = db_query(wk)  # Weekly Data Returned Here
    print("WEEK: {} ".format(wk))

    data = {(name, n): [y, 0, 0] for name, n, y in yr}

    print("DATA:".format(data))
    for name, n, m in mnth:
        data[name, n][1] = m

    for name, n, w in wk:
        data[name, n][2] = w

    data = tuple(tuple([*k, *v]) for k, v in data.items())

    print("DATA: {}".format(data))
    return data
Другие вопросы по тегам