В соответствии с вашим кодом, я предполагаю, что ваши входные данные выглядят следующим образом:
class Data:
def __init__(self, airportname, depdelay):
self.Orig = airportname
self.DepDelay = depdelay
data = [
Data('airportname1',3),
Data('airportname2',0),
Data('airportname3',2),
Data('airportname1',1),
Data('airportname2',4),
Data('airportname3',0),
Data('airportname2',0),
Data('airportname1',0),
Data('airportname3',1),
Data('airportname4',3),
Data('airportname2',2),
Data('airportname1',0),
Data('airportname4',3),
]
Пожалуйста, попробуйте следующее решение:
result = {}
for x in data:
if x.Orig not in result:
result[x.Orig] = {'delay':0, 'ontime':0}
if x.DepDelay > 0:
result[x.Orig]['delay'] += 1
else:
result[x.Orig]['ontime'] += 1
maxperf = 0
minperf = 1
maxairport = []
minairport = []
for airport, r in result.items():
a = r['ontime']
b = r['delay']
perf = a/(a+b)
print("Airport Name: {}, ontime: {}, delay: {}, perf: {}".format(airport,a,b,perf))
if perf > maxperf:
maxperf = perf
maxairport = [airport,]
elif perf == maxperf:
maxairport.append(airport)
if perf < minperf:
minperf = perf
minairport = [airport,]
elif perf == minperf:
minairport.append(airport)
print("best performance airport: {}, performance: {}".format(maxairport, maxperf))
print("worst performance airport: {}, performance: {}".format(minairport, minperf))
Вывод на основе моего ввода:
Airport Name: airportname1, ontime: 2, delay: 2, perf: 0.5
Airport Name: airportname2, ontime: 2, delay: 2, perf: 0.5
Airport Name: airportname3, ontime: 1, delay: 2, perf: 0.3333333333333333
Airport Name: airportname4, ontime: 0, delay: 2, perf: 0.0
best performance airport: ['airportname1', 'airportname2'], performance: 0.5
worst performance airport: ['airportname4'], performance: 0.0