如何在表示航班的字典中列出重复值?

2024-06-27 09:15:22 发布

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

我有一本字典,里面有另一本字典和一些清单

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]]}  }

如你所见,达美航空、西南航空和美国航空都有1102航班。我想把所有重复的航班列在字典里。 预期产量:

{1102: ['American', 'Southwestern', 'Delta']}

我尝试通过遍历字典访问这些值,如下所示:

for airline in flightsD:
    for flights in flightsD[airline]:

我正在考虑制作一个列表来存储所有这些值,但我不完全确定如何去做


Tags: 航空字典satdeltaphxamerican航班ind
3条回答

如果您想要一个只包含这些值的字典,可以使用下面的代码(基于上面的代码):

list = []
for flights in flightsD.values():
    list.extend(flights.keys())

d = {}
for airline, flights in flightsD.items():
    for flight in flights:
        if list.count(flight) > 1:
            d.setdefault(flight, []).append(airline)

可以按如下方式使用defaultdict

from collections import defaultdict

airlines, schedules = flightsD.keys(), flightsD.values()

flight_nums = [s.keys() for s in schedules]

duplicates = defaultdict(list)
for i, item1 in enumerate(flight_nums):
    for j, item2 in enumerate(flight_nums):       
        for k in item1:
            if i != j and k in item2 and airlines[i] not in duplicates[k]:
                duplicates[k].append(airlines[i])


print(duplicates)

>>> {1102: ['American', 'Southwestern', 'Delta']}

您可以迭代dict项,使用dict.setdefault初始化带有要附加到的列表的输出dict,并使用dict理解来输出带有多个项的子列表的项:

d = {}
for airline, flights in flightsD.items():
    for flight in flights:
        d.setdefault(flight, []).append(airline)
print({k: v for k, v in d.items() if len(v) > 1})

这将输出:

{1102: ['Delta', 'Southwestern', 'American']}

相关问题 更多 >