Python从两个循环变量生成字典仅显示最后值该如何修复?
问题根因
- 循环逻辑错误:你写的两次独立for循环中,每次都直接给
words、definitions变量重新赋值,循环结束后两个变量只会保留最后一次遍历得到的内容 - 容器类型误用:
{words, definitions}是Python集合(set)的创建语法,无法实现单词到释义的键值对映射需求,就算你存了多个值也不会有对应关系 - 对应关系丢失:独立遍历单词、释义两个列表,没有做位置匹配,就算你把两个变量改成列表存储,也无法保证单词和它的释义正确对应
修复后可运行代码
from bs4 import BeautifulSoup import requests URL = "https://www.vocabulary.com/lists/176046" page = requests.get(URL) soup = BeautifulSoup(page.content, 'html.parser') # 获取所有单词和释义的节点列表 word_nodes = soup.find_all(attrs={'class':'word dynamictext'}) definition_nodes = soup.find_all(attrs={'class':'definition'}) # 初始化空字典存储单词和释义的映射 my_dict = {} # 同步遍历两个列表,保证单词和释义一一对应 for word_node, def_node in zip(word_nodes, definition_nodes): word = word_node.text.strip() definition = def_node.text.strip() my_dict[word] = definition # 打印所有单词和释义 print(my_dict)
核心修改说明
- 提前初始化空字典
my_dict,用于循环中逐次添加键值对,不会覆盖之前存入的内容 - 用
zip()函数同步遍历单词、释义节点列表,页面中单词的排序和释义的排序是一一对应的,用zip配对可以保证映射关系正确 - 循环内直接对字典做赋值操作,每次遍历都将对应单词和释义作为键值对存入字典
- 补充了
strip()操作去除单词和释义前后的多余空白字符,提升数据整洁度
内容的提问来源于stack exchange,提问作者Wassim Maestro
相关产品推荐
相关产品推荐

