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

网页抓取数据构建字典:州名与日照时长关联问题

问题描述

我通过for循环从网页抓取的表格中遍历获取到所有州名及对应的日照时长,但目前comparison_state会输出全部州名,sunlight也会输出全部时长。我需要将州名与对应时长一一关联,构建成可支持用户输入查询(如输入“Washington”即可获取对应时长)的字典或字典数组,请问该如何实现?

原代码:

table = soup.find('table')

list_of_states = table.find_all('tr')

for state in list_of_states:
    state_name = state.find('td')
    if state_name is None:
        continue
    hours = state.find_all('td')[1].text

    comparison_state = str(state_name.text.strip().lower())
    sunlight = float(hours.split()[0])

dict = {comparison_state : 1, sunlight : 2}
解决方案

你当前的问题是每次循环都会覆盖comparison_state和sunlight变量,最后仅保留了最后一次循环的结果,且字典的写法逻辑错误(用数值作为键完全无法实现查询需求)。正确的做法是先初始化一个空字典,在循环过程中逐个将州名与对应日照时长作为键值对存入字典。

修改后的完整代码:

table = soup.find('table')
list_of_states = table.find_all('tr')

# 初始化空字典,键为小写州名,值为对应日照时长
state_sunlight_map = {}

for state in list_of_states:
    state_name = state.find('td')
    if state_name is None:
        continue
    hours = state.find_all('td')[1].text

    # 处理州名,转小写并去除首尾空白
    state_key = state_name.text.strip().lower()
    # 提取日照时长并转为浮点数
    sunlight_hours = float(hours.split()[0])
    
    # 将当前州的日照数据存入字典
    state_sunlight_map[state_key] = sunlight_hours

# 实现用户查询功能
user_query = input("请输入州名:").strip().lower()
if user_query in state_sunlight_map:
    print(f"{user_query.title()}的日照时长为{state_sunlight_map[user_query]}小时")
else:
    print("未找到该州的日照数据")
关键说明
  • 循环前创建空字典state_sunlight_map,避免每次循环覆盖已存储的数据
  • 循环内通过state_sunlight_map[state_key] = sunlight_hours,将每个州的信息以“小写州名:日照时长”的形式存入字典,确保所有州的数据都被保留
  • 查询时将用户输入转为小写,与字典的键匹配,避免大小写差异导致查询失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:10:30