Использование шаблона 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