分类听写

2024-06-11 02:08:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要帮助写一个函数来打印在fromCity和toCity为所有航空公司指定的所有航班。这是Im使用def reportAllFlightsFromTo(flightsD,fromCity,toCity)的函数:

下面是我已经尝试过的代码:

def reportAllFlightsFromTo (airD,fromCity,toCity): 
    for aLines in airD:
        print(aLines)
        newList=[]
        for flightNum in airD[aLines]:
            if airD[aLines][flightNum][0][0]==fromCity and airD[aLines][flightNum][1][0]==toCity:
                tempList=[]
                tempList.append(airD[aLines][flightNum][0][1])
                tempList.append(airD[aLines][flightNum][1][1])
                tempList.append(flightNum)
                newList.append(tempList)
        newList.sort()
        print(newList)

这是我正在使用的词典:

flightsD={"Delta":{1102:[["IND",1850],["MDW",1955]],
                   1096:[["PHX",900],["MDW",1255]],
                   1445:[["ATL",1135],["LAX",1810]],
                   1776:[["PHL",1350],["RAP",1610]],
                   1226:[["PHX",950],["MDW",1345]],
                   1885:[["ATL",1305],["LAX",2000]],
                   1009:[["MDW",1850],["IND",1955]],
                   9001:[["MDW",2145],["IND",2255]]},
          "Southwestern":{1111:[["SAT",430],["MDW",825]],
                          2121:[["MDW",430],["SAT",825]],
                          4335:[["PHX",450],["MDW",745]],
                          1102:[["MDW",1100],["PHX",1450]]},
          "American":{7765:[["IND",1850],["CHA",2105]],
                   2133:[["BNA",900],["IND",1115]],
                   3321:[["HOU",1335],["ATL",1615]],
                   2100:[["BNA",900],["IND",1115]],
                   4311:[["HOU",905],["ATL",1255]],
                   5577:[["ATL",1100],["HOU",1350]],
                   1102:[["BNA",1100],["HOU",1450]]}  }

这是我用当前代码收到的结果:

Delta
[]
Southwestern
[]
American
[[1850, 2105, 7765]]

这就是我需要的结果:

reportAllFlightsFromTo(flightsD,"MDW","IND")
       MDW  IND
  NUM  DEP  ARR  AIRLINE   
 1009 1850 1955  Delta     
 9001 2145 2255  Delta

Tags: deltaphxindappendhouatltemplistnewlist
2条回答
def reportAllFlightsFromTo(flightsD,fromCity,toCity):
    for airline_name, flights in flightsD.items():
        for flight_number, flight in flights.items():
            if flight[0][0] == fromCity and flight[1][0] == toCity:
                yield flight_number, flight[0][1], flight[1][1], airline_name

result = list(reportAllFlightsFromTo(flightsD,"MDW","IND"))

print('       MDW  IND')
print('  NUM  DEP  ARR  AIRLINE')
for i in result:
    print(' {} {} {}  {}'.format(*i))

输出:

       MDW  IND
  NUM  DEP  ARR  AIRLINE
 1009 1850 1955  Delta
 9001 2145 2255  Delta
def reportFlightsFromTo(flights, src, dest):
    matching_flights = {}
    for airline, flight_dict in flights.items():
        for flight_no, flight_info in flight_dict.items():
            if flight_info[0][0] == src and flight_info[1][0] == dest:
                tmp = {flight_no:{'depart':flight_info[0][1], 'arrive':flight_info[1][1]}}
                if matching_flights.get(airline):
                    matching_flights[airline].append(tmp)
                else:
                    matching_flights[airline] = [tmp]
    return matching_flights

这和Filip的答案之间的主要区别是Filip的函数是一个生成器(注意关键字yield的使用)。Mine将返回一个包含信息的数据结构,然后您可以根据需要对其进行格式化。你知道吗

更重要的是要注意相似之处。也就是说,使用.items()对字典中的键和值对进行迭代。这避免了代码中的长访问,例如airD[aLines][flightNum][0][0],方法是使值在循环中可用。你知道吗

相关问题 更多 >