Python字典值嵌套列表实现温度分组城市时报错如何解决
问题诊断与修复方案
报错直接原因
- 你代码里的
if city not in group逻辑完全错误:group是通过温度计算得到的整数(int类型),in运算符要求右侧是可迭代对象(列表、字典等),整数不能被遍历,所以直接触发TypeError。
其他核心逻辑错误
除了报错外你的代码还有多处逻辑不符合需求:
- 字典用法错误:你直接执行
cities_per_temp_bin = city把整个字典覆盖成了城市列表,完全没有用到键值对存储分组和对应城市的关系 - 分组编号错误:你当前计算的
int(temp//5)在温度为0-5℃时得到的是0,不符合你要求的「0-5℃为组1」的规则,需要加1修正 - 城市添加逻辑混乱:你单独维护了全局的
city列表,还在循环里把整个城市列表重复追加,完全不需要额外维护这个变量 - 没有判断分组是否存在:首次遇到某个分组时需要先在字典里初始化空列表,否则直接追加会报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
相关产品推荐
相关产品推荐

