使用BeautifulSoup爬取月度气候表格后,如何合并拆分的同类字典?
同指标字典合并实现方案
核心逻辑
当前零散输出的字典,是把同一个气候指标拆分为上下两个半年的独立条目。合并时以气候指标的字段名作为唯一匹配键,对同个指标的月份序列、数值序列做拼接即可。
代码修改步骤
- 在遍历所有表格的循环外层,新增聚合存储容器,用来存放合并后的结果:
# 初始化聚合字典,键为气候指标名 merged_result = {} - 替换原有循环中直接打印临时字典的逻辑,新增聚合判断:
# 替换原代码中的 print(dict_values) # 取当前条目的指标名,去除首尾空格避免匹配失败 field_key = dict_values['field'][0].strip() if field_key not in merged_result: # 首次遇到该指标,存入初始数据 merged_result[field_key] = { 'months': dict_values['months'].copy(), 'field': dict_values['field'], 'values': dict_values['values'].copy() } else: # 已存在同指标,拼接对应月份、数值 merged_result[field_key]['months'].extend(dict_values['months']) merged_result[field_key]['values'].extend(dict_values['values']) - 所有表格遍历完成后,取出聚合结果即可得到合并好的完整数据:
# 提取最终合并的12个月完整气候数据 final_climate_data = list(merged_result.values())
效果说明
运行后输出的Average high in ºF条目会完全匹配目标格式:
{'months': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], 'field': ['Average high in ºF '], 'values': [23, 27, 34, 44, 56, 63, 65, 64, 55, 40, 28, 25]}
其余气温、降水、日照、降雪类指标都会自动完成12个月数据的拼接,无需手动逐个处理。
注意:取指标名作为键时,建议去除首尾多余空格,避免网页源码里的空格差异导致同个指标被识别为两个独立条目。
内容的提问来源于stack exchange,提问作者lord stock
相关产品推荐
相关产品推荐

