您好,我正在尝试创建一个像这样的字典
{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
通常用于索引循环变量。在这里,row
或rec
似乎更合适,而且不太可能给读者(包括未来的你)造成混淆。
编辑:你正确地指出,使用.append()
会导致错误,因为它不返回列表本身。更新后的答案和广告中的一样。