如何从元组列表创建字典且不覆盖key,实现指定格式数据输出
问题原因
你原有实现的错误主要有3点:
- 变量名拼写错误:
greyhound多次误写为greyhoud,Distance误写为Distatnce,会触发未定义变量报错 - 循环逻辑冗余:内层
for key in k是遍历key字符串的单个字符,会生成大量无意义的单字符键 - 存储逻辑错误:每次给
greyhound的value套了一层多余的列表,append后会出现多层嵌套,不符合输出要求
解决方法
方案1:基于已有的table_information直接转换
你已经拿到了结构化的table_information列表,直接遍历每个元组对应赋值即可,代码如下:
# 初始化目标字典,三个字段对应空列表 new_dict = { "Date": [], "Track": [], "Distance": [] } # 遍历每条数据,注意元组顺序为 (Track名称, 日期, 距离列表) for track, date, dist_list in table_information: new_dict["Track"].append(track) new_dict["Date"].append(date) new_dict["Distance"].append(dist_list)
方案2:爬取过程中直接生成字典
不需要先存table_information列表,爬取时直接往目标字典追加数据即可,注意补充你提取距离列表的逻辑:
import requests from lxml import html import pandas as pd new_dict = { "Date": [], "Track": [], "Distance": [] } for t in my_url[:5]: page_detail = requests.get(t) tree_1 = html.fromstring(page_detail.content) title = ''.join(tree_1.xpath('//div/h1[@class="title"]/text()')) Track = title.split(' ')[0].strip() date = title.split('-')[1].strip() year = pd.to_datetime('now').year race_date = pd.to_datetime(date + ' ' + str(year)).strftime('%d/%m/%Y') # 补充你提取距离列表的逻辑,赋值给dist_list变量 # dist_list = 你提取距离列表的代码 # 直接追加到对应字段 new_dict["Track"].append(Track) new_dict["Date"].append(race_date) new_dict["Distance"].append(dist_list)
注意:你原有爬取代码中往
table_information追加的元组顺序是(race_date, Track),和你给出的示例table_information的元组顺序(Track, Date, Distance)不一致,实际使用时要注意调整顺序避免字段错位。
内容的提问来源于stack exchange,提问作者chuky pedro
相关产品推荐
相关产品推荐

