我有一个进行数据库调用的脚本然后将结果作为元组的元组返回。数据库调用跟踪数据,从年份到数据,从月到今,以及从周到今的格式。
由于新的财政年度,我不再按预期获得某些项目的年度最新数据,但如果数据库没有返回任何内容,我需要在元组中创建一个条目,所以最终表格将显示所有位置,如果没有返回则写入零。
这就是我所拥有的:
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))
如何在不改变数据的情况下确保其他条目进入
答案 0 :(得分:0)
您可以使用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