从SQL提取数据构建Python字典时列表值提取异常问题
解决同键多行数据合并为字典值列表的问题
你的核心问题是循环中每次遇到重复键都会覆盖字典值,导致仅保留最后一条记录的row[5]。要实现同键的row[5]合并为列表,需要在循环中判断键是否已存在,分情况初始化或追加数据:
修改后的代码
x = cursor_test.execute('''SELECT Next.team_home||"-"||Next.team_away, Next.championship, Next.date, Next.current_round, Next.clock, Results.score_home FROM Next INNER JOIN Results ON Next.team_home = Results.team_home;''') test = {} for row in x.fetchall(): key = row[0] # 提取固定不变的字段:row[1]到row[4] fixed_fields = row[1:5] current_score = row[5] if key not in test: # 首次遇到该键,初始化值:固定字段 + 空列表用于存score test[key] = list(fixed_fields) + [[]] # 将当前score追加到列表中 test[key][4].append(current_score)
代码说明
- 每次循环先提取键
key = row[0],以及固定字段fixed_fields(对应原需求的row[1]-row[4])和当前分数current_score(row[5]) - 若键不存在于字典中,初始化值为
固定字段列表 + 空列表,确保固定字段只存储一次 - 若键已存在,直接将当前分数追加到对应位置的列表里
效果验证
针对你提供的示例行,最终test['Minnesota-Dallas']会生成:
['NHL', 8.1, 9, '15:00', [0, 1, 1, 5]]
完全符合预期结构。
内容的提问来源于stack exchange,提问作者user20812299
相关产品推荐
相关产品推荐

