Python将列表按指定头部转换为字典仅返回首个元素问题求解
问题原因
- 仅读取了
detail_flights列表的第一个元素拆分处理,没有遍历整个列表的所有航班记录 - 字典的键重复时会直接覆盖旧值,你将
detail_headers重复了4次得到24个键,但拆分第一个元素仅得到12个值,12组键值对中每6个就会重复一轮键名,前面的值全部被后面覆盖,最终仅保留最后6个值对应的字典 - 未对每条记录拆分后的字段按
detail_headers长度分组处理,单条detail_flights元素包含往返两趟航班的信息,每趟正好对应6个头部键
解决方法
遍历所有航班记录,将每条记录拆分后的字段按头部列表长度分组,每组单独打包为字典存入结果集,示例代码如下:
detail_flights = ['17:20 – 19:00\nMXP Aeroporto Malpensa\n‐\nBCN Barcellona-El Prat\ndiretto\n1h 40m\n6:20 – 8:00\nBCN Barcellona-El Prat\n‐\nBGY Bergamo Orio al Serio\ndiretto\n1h 40m', '17:20 – 19:00\nMXP Aeroporto Malpensa\n‐\nBCN Barcellona-El Prat\ndiretto\n1h 40m\n11:35 – 13:05\nBCN Barcellona-El Prat\n‐\nMXP Aeroporto Malpensa\ndiretto\n1h 30m', '17:20 – 19:00\nMXP Aeroporto Malpensa\n‐\nBCN Barcellona-El Prat\ndiretto\n1h 40m\n12:05 – 13:45\nBCN Barcellona-El Prat\n‐\nBGY Bergamo Orio al Serio\ndiretto\n1h 40m', '17:20 – 19:00\nMXP Aeroporto Malpensa\n‐\nBCN Barcellona-El Prat\ndiretto\n1h 40m\n20:15 – 21:55\nBCN Barcellona-El Prat\n‐\nBGY Bergamo Orio al Serio\ndiretto\n1h 40m'] detail_headers = ['departure_time', 'departure_airport', 'to_delete', 'arrival_airport', 'type_flight', 'duration'] result = [] for flight_item in detail_flights: # 拆分单条航班记录的所有字段 fields = flight_item.split('\n') # 每6个字段为一组,对应一趟航班 for i in range(0, len(fields), len(detail_headers)): single_flight_fields = fields[i:i+len(detail_headers)] # 打包成字典 flight_dict = dict(zip(detail_headers, single_flight_fields)) # 可选:删除没用的to_delete字段,不需要可注释下行 flight_dict.pop('to_delete') result.append(flight_dict) print(result)
运行后会得到包含8段航班(4条原记录,每条对应往返各一段)信息的字典列表,符合转换需求。
内容的提问来源于stack exchange,提问作者Box
相关产品推荐
相关产品推荐

