Python 使用元组模板中的元组

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)

我有一个脚本,它进行DB调用,然后将结果作为元组的元组返回。DB调用跟踪从年到数据、从月到日期和从周到日期格式的数据

由于新的财政年度,我不再像预期的那样获取某些项目的任何年初至今的数据,但是如果DB没有返回任何内容,我需要在元组中创建一个条目,这样最终的表将显示所有位置,如果没有返回任何内容,则写入零

以下是我所拥有的:

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
语句