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

Python字典值嵌套列表实现温度分组城市时报错如何解决

问题诊断与修复方案

报错直接原因

  • 你代码里的if city not in group逻辑完全错误:group是通过温度计算得到的整数(int类型),in运算符要求右侧是可迭代对象(列表、字典等),整数不能被遍历,所以直接触发TypeError。

其他核心逻辑错误

除了报错外你的代码还有多处逻辑不符合需求:

  1. 字典用法错误:你直接执行cities_per_temp_bin = city把整个字典覆盖成了城市列表,完全没有用到键值对存储分组和对应城市的关系
  2. 分组编号错误:你当前计算的int(temp//5)在温度为0-5℃时得到的是0,不符合你要求的「0-5℃为组1」的规则,需要加1修正
  3. 城市添加逻辑混乱:你单独维护了全局的city列表,还在循环里把整个城市列表重复追加,完全不需要额外维护这个变量
  4. 没有判断分组是否存在:首次遇到某个分组时需要先在字典里初始化空列表,否则直接追加会报KeyError

修复后代码

cities_per_temp_bin = {} # 键是分组编号,值是对应分组的城市列表
is_first_line = True

# 用with open自动管理文件句柄,更安全
with open("climate_data_Dec2017.csv", encoding="utf-8") as f:
    for row in f:
        if is_first_line:
            is_first_line = False
            continue
        values = row.strip().split(",")
        date = values[0]
        if date == "2017-12-25":
            # 如果第三列是多个城市用空格分隔,可替换为循环遍历values[2].split()的结果
            city_name = values[2].strip()
            temp = float(values[5])
            # 计算符合要求的分组编号
            group = int(temp // 5) + 1
            # 分组不存在则先初始化空列表
            if group not in cities_per_temp_bin:
                cities_per_temp_bin[group] = []
            # 避免同一城市重复添加到同个分组
            if city_name not in cities_per_temp_bin[group]:
                cities_per_temp_bin[group].append(city_name)

# 按分组顺序输出结果
for key in sorted(cities_per_temp_bin.keys()):
    print(key, ":", sorted(cities_per_temp_bin[key]))

补充说明

如果你的数据里存在负温度,可以自行调整分组计算逻辑适配你的业务要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:42:03