You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加city作为主键触发ValueError,求代码修正及输出调整方案

问题描述

原本以name为主键时代码运行正常,输出格式如Jonny 33、Tiffany 45等。现在希望添加city作为主键,输出格式改为Liverpool, Jonny 33.,但运行代码时触发错误:ValueError: not enough values to unpack (expected 3, got 2),怀疑字典创建或city的添加方式有误,请求修正代码并实现city前置的输出要求。

原代码如下:

import sqlite3
c = sqlite3.connect('abc')
cursor = c.cursor()

x = {}

def Button_func():
   data = c.execute('SELECT city, name1, name2, number FROM MyListTable')

    for r in data.fetchall():   
        if r[0] not in x:
            x[r[0]] = []
        x[r[0]].append([r[1], r[3]])

    for key_city, val_name, val_number in x.items():
        result = sum(val_number) / 2
        print(key_city, val_name, result)


Button_func()
错误原因

报错出现在字典遍历的循环中:for key_city, val_name, val_number in x.items()。x.items()返回的是键值对元组(每个元组包含2个元素:城市名、对应的[name, number]列表集合),但你试图将其拆分为3个变量,这就导致了“值不足”的错误。此外,后续对val_number执行sum()也会出错,因为val_number实际上是单个数值而非可迭代的列表。

修正后的代码
import sqlite3

def Button_func():
    # 用with语句自动管理数据库连接,避免手动关闭的遗漏
    with sqlite3.connect('abc') as c:
        data = c.execute('SELECT city, name1, name2, number FROM MyListTable')
        city_data = {}

        for row in data.fetchall():
            city = row[0]
            name = row[1]  # 若需要合并name1和name2,可改为f"{row[1]} {row[2]}"
            number = row[3]
            
            # 按城市分组存储name和number的对应关系
            if city not in city_data:
                city_data[city] = []
            city_data[city].append((name, number))

        # 按要求格式输出内容
        for city, name_num_pairs in city_data.items():
            for name, num in name_num_pairs:
                # 若保留原代码的sum/2逻辑,可根据实际需求调整,比如改为result = num / 2
                print(f"{city}, {name} {num}.")

Button_func()
关键修改点
  1. 修复遍历逻辑:调整字典遍历方式,先取城市名和对应的(name, number)集合,再嵌套遍历每个name和number,匹配字典的实际结构。
  2. 优化变量作用域:将存储数据的字典移至函数内部,避免全局变量带来的潜在问题。
  3. 规范输出格式:使用f-string实现城市, 名字 数值.的要求格式。
  4. 数据库连接优化:使用with语句自动管理数据库连接,无需手动处理关闭操作。

内容的提问来源于stack exchange,提问作者user20737376

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 20:01:44