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

如何将Python的detail_flights列表转换为指定键名的字典结构

Python列表转指定结构字典问题处理

问题描述

我需要将Python中的detail_flights列表转换为符合要求的字典,该列表的部分数据如下(整体结构完全一致):

detail_flights = ['22:20 – 23:55\nBGY Bergamo Orio al Serio\n‐\nBCN Barcellona-El Prat\ndiretto\n1h 35m\n6:20 – 8:00\nBCN Barcellona-El Prat\n‐\nBGY Bergamo Orio al Serio\ndiretto\n1h 40m', '22:20 – 23:55\nBGY Bergamo Orio al Serio\n‐\nBCN Barcellona-El Prat\ndiretto\n1h 35m\n12:05 – 13:45\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']

期望得到的输出结构示例如下:

detail_flights = [{'departure_time': '22:20 – 23:55', 'departure_airport': 'BGY Bergamo Orio al Serio', 'to_delete': '-', 'arrival_airport': 'BCN Barcellona-El Pra', 'type_flight': 'diretto', 'duration': '1h 35', 'departure_time': '6:20 – 8:00', 'departure_airport': 'BCN Barcellona-El Prat', 'arrival_airport': 'BGY Bergamo Orio al Serio', 'type_flight': 'diretto', 'duration': '1h 40m'}, {....}]

我目前编写的代码如下:

def listToString(s): 
    str1 = " " 
    return (str1.join(detail_flights))
        
detail_flights = listToString(detail_flights)
detail_flights = detail_flights.split(sep='\n')

from itertools import zip_longest
detail_headers = ['departure_time', 'departure_airport', 'to_delete', 'arrival_airport', 'type_flight', 'duration']
d1=zip_longest(detail_headers,detail_flights)
print (dict(d1))

当前运行后得到的错误输出如下,无法满足需求:

{'departure_time': '22:20 – 23:55', 'departure_airport': 'BGY Bergamo Orio al Serio', 'to_delete': '‐', 'arrival_airport': 'BCN Barcellona-El Prat', 'type_flight': 'diretto', 'duration': '1h 35m', None: '1h 45m'}

请问我该如何修正代码,实现将列表转换为符合要求的字典结构?

解决方案

问题说明

你给出的期望输出存在Python字典不支持的重复键,同一个字典内如果出现多次相同键名,后写入的值会直接覆盖前面的值,无法同时保留去程和返程的同名字段数据。结合原始数据中每个字符串对应一组往返航班的特性,以下是合法可运行的实现方案:

修正后代码

# 原始数据
detail_flights = ['22:20 – 23:55\nBGY Bergamo Orio al Serio\n‐\nBCN Barcellona-El Prat\ndiretto\n1h 35m\n6:20 – 8:00\nBCN Barcellona-El Prat\n‐\nBGY Bergamo Orio al Serio\ndiretto\n1h 40m', '22:20 – 23:55\nBGY Bergamo Orio al Serio\n‐\nBCN Barcellona-El Prat\ndiretto\n1h 35m\n12:05 – 13:45\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 item in detail_flights:
    # 拆分单个行程字符串为字段列表
    fields = item.split('\n')
    # 按6个字段一组拆分,分别对应去程、返程
    go_dict = dict(zip(detail_headers, fields[:6]))
    return_dict = dict(zip(detail_headers, fields[6:]))
    # 不需要to_delete字段可打开下面两行删除
    # del go_dict['to_delete']
    # del return_dict['to_delete']
    
    # 方案1:每个行程存储为[去程字典, 返程字典]的列表结构,可直接对应你原始的两段航班数据
    result.append([go_dict, return_dict])
    
    # 方案2:每个行程存储为带go/return标识的字典,按需二选一
    # result.append({"go": go_dict, "return": return_dict})

print(result)

输出示例(方案1)

[
    [
        {'departure_time': '22:20 – 23:55', 'departure_airport': 'BGY Bergamo Orio al Serio', 'to_delete': '‐', 'arrival_airport': 'BCN Barcellona-El Prat', 'type_flight': 'diretto', 'duration': '1h 35m'},
        {'departure_time': '6:20 – 8:00', 'departure_airport': 'BCN Barcellona-El Prat', 'to_delete': '‐', 'arrival_airport': 'BGY Bergamo Orio al Serio', 'type_flight': 'diretto', 'duration': '1h 40m'}
    ],
    [
        {'departure_time': '22:20 – 23:55', 'departure_airport': 'BGY Bergamo Orio al Serio', 'to_delete': '‐', 'arrival_airport': 'BCN Barcellona-El Prat', 'type_flight': 'diretto', 'duration': '1h 35m'},
        {'departure_time': '12:05 – 13:45', 'departure_airport': 'BCN Barcellona-El Prat', 'to_delete': '‐', 'arrival_airport': 'BGY Bergamo Orio al Serio', 'type_flight': 'diretto', 'duration': '1h 40m'}
    ]
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:09:03