Python 使用元组模板中的元组
我有一个脚本,它进行DB调用,然后将结果作为元组的元组返回。DB调用跟踪从年到数据、从月到日期和从周到日期格式的数据 由于新的财政年度,我不再像预期的那样获取某些项目的任何年初至今的数据,但是如果DB没有返回任何内容,我需要在元组中创建一个条目,这样最终的表将显示所有位置,如果没有返回任何内容,则写入零 以下是我所拥有的:Python 使用元组模板中的元组,python,python-3.x,tuples,Python,Python 3.x,Tuples,我有一个脚本,它进行DB调用,然后将结果作为元组的元组返回。DB调用跟踪从年到数据、从月到日期和从周到日期格式的数据 由于新的财政年度,我不再像预期的那样获取某些项目的任何年初至今的数据,但是如果DB没有返回任何内容,我需要在元组中创建一个条目,这样最终的表将显示所有位置,如果没有返回任何内容,则写入零 以下是我所拥有的: def Main(): template = (('ham', '0905', 0), ('Wind', '852', 0), ('Wash', '3292', 0)
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
我如何确保其他条目在不改变数据的情况下进入您可以使用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
您可以使用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
你能纠正一下填充物吗?是的,对不起,我现在就知道了。那里的双圈没有达到你所期望的效果。您可以在每次迭代中尝试打印
每个
和部分
,以查看得到的内容。顺便说一句,元组是不可变的,因此每次尝试进行更改时都要创建新元组,您应该使用其他容器。如果您需要输出元组,那么在所有更改完成后将其交换回来。我想我正在其他地方覆盖年份数据。我知道这不是最漂亮的解决方案,但我已经做了一百次调整,尽量不必重新编写了。你能纠正填充吗?是的,对不起,我现在就明白了。双循环没有达到你的预期。您可以在每次迭代中尝试打印每个
和部分
,以查看得到的内容。顺便说一句,元组是不可变的,因此每次尝试进行更改时都要创建新元组,您应该使用其他容器。如果您需要输出元组,那么在所有更改完成后将其交换回来。我想我正在其他地方覆盖年份数据。我知道这不是最漂亮的解决方案,但我做了一百次调整,尽量不重新编写。我在yr=((a,b,yr_dict[a+”:“+b]对于模板中的a,b))
有一个缺少的括号和一个元组
我抓住了括号,这是另一回事tuple
关键字?PyCharm称之为语法错误,并指向for
语句我在yr=((a,b,yr_dict[a+”:“+b]表示模板中的a,b))
有一个缺少的括号和一个tuple
我抓住了括号,这是另外一个东西tuple
关键字?PyCharm称之为语法错误,并指向for
语句