使用元组模板元组

时间:2017-10-16 12:47:28

标签: python python-3.x 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 个答案:

答案 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