Python生成字典仅保留循环最后一次迭代结果的问题咨询
字典仅保留最后一次迭代结果的原因及解决方案
问题原因
Python字典的键具有唯一性,当你使用重复的键(比如title_list中反复出现的Rank:、Major:等)生成字典时,后续的键值对会直接覆盖之前的同键条目,最终每个键只会保留最后一次出现的对应值,这就是你只看到最后一组数据的核心原因。
解决方案
你的数据是每6个条目对应一个专业的完整信息,正确的做法是将每组数据封装为一个字典,再存入列表,以此保留所有专业的完整数据:
方式1:基于已有列表拆分处理
利用列表切片按固定步长(6)拆分,逐个生成字典并存入列表:
result_list = [] # 每组6个键值对,按步长6遍历 for i in range(0, len(title_list), 6): group_titles = title_list[i:i+6] group_values = value_list[i:i+6] result_list.append(dict(zip(group_titles, group_values))) # 打印所有专业数据 for item in result_list: print(item)
方式2:解析时直接分组(更高效)
跳过中间列表存储,直接在BeautifulSoup解析阶段按组处理数据:
from bs4 import BeautifulSoup with open('./Desktop/Payscale.html') as web: soup = BeautifulSoup(web, 'html.parser') data = soup.find_all('td', 'data-table__cell') result_list = [] # 每6个<td>对应一个专业的完整数据 for i in range(0, len(data), 6): major_dict = {} # 截取当前专业的6个<td>元素 for each in data[i:i+6]: title = each.find('span', 'data-table__title').get_text() value = each.find('span', 'data-table__value').get_text() major_dict[title] = value result_list.append(major_dict) # 输出所有结果 for idx, major_info in enumerate(result_list, 1): print(f"专业 {idx}:") print(major_info)
内容的提问来源于stack exchange,提问作者SkinnySwole
相关产品推荐
相关产品推荐

