python从SQL查询中嵌套字典



您好,我正在尝试创建一个像这样的字典

{104: {'tid': 1234, 'date': '08/26/2022', 'total': '95.96'}, {'tid': 1235, 'date': '09/25/2022', 'total': '95.96'}, {'tid': 1236, 'date': '07/27/2022', 'total': '95.96'}}
{105: {'tid': 1237, 'date': '08/26/2022', 'total': '85.96'}, {'tid': 1238, 'date': '09/25/2022', 'total': '85.96'}, {'tid': 1238, 'date': '07/27/2022', 'total': '85.96'}}

我有以下的数据库,我正在查询

CID || TID || DATE || TOTAL
104    1234   08/26/2022  95.96
104    1235   09/25/2022  95.96
104    1236   07/27/2022  95.96
105    1237   08/26/2022  85.96
105    1238   09/25/2022  85.96
105    1239   07/27/2022  85.96

我有以下代码,以遍历查询结果并创建一个字典,但它不是像我想要的那样创建它

outer_dict = {}
records = cursor.fetchall()
for i in records:
inner_dict = {"tid":i[1], "date": i[2], "total": i[3]}
outer_dict[i[0]] = inner_dict

任何帮助都将非常感激。

我只能想象你真正想要的是这样的东西:

{   
104: [
{'tid': 1234, 'date': '08/26/2022', 'total': '95.96'}, 
{'tid': 1235, 'date': '09/25/2022', 'total': '95.96'}, 
{'tid': 1236, 'date': '07/27/2022', 'total': '95.96'}
],
105: [
{'tid': 1237, 'date': '08/26/2022', 'total': '85.96'}, 
{'tid': 1238, 'date': '09/25/2022', 'total': '85.96'}, 
{'tid': 1238, 'date': '07/27/2022', 'total': '85.96'}
]
}

获取方法如下:

outer_dict = {}
records = cursor.fetchall()
for i in records:
inner_dict = {"tid": i[1], "date": i[2], "total": i[3]}
outer_dict[i[0]] = outer_dict.get(i[0], []) + [inner_dict]

最后一行是唯一的区别。.get()获取给定字典键的值,在这种情况下,它要么是已经存在的列表,要么是键不存在时的默认值,在这种情况下,它是一个新的空列表。然后将新的inner_dict添加到列表中,并将该键的字典值设置到结果列表中。

顺便说一下:直接使用for i in records:循环记录是正确的方法,但是您可能不应该在这里将循环变量命名为i,因为i通常用于索引循环变量。在这里,rowrec似乎更合适,而且不太可能给读者(包括未来的你)造成混淆。

编辑:你正确地指出,使用.append()会导致错误,因为它不返回列表本身。更新后的答案和广告中的一样。

相关内容

  • 没有找到相关文章