Я пытаюсь получить доступ к словарю в Python. У меня есть список, содержащий коды аэропортов, и для каждого кода я хочу использовать этот код для ввода в свой словарь и получения информации об аэропорте, находящейся в airportDict, из класса моего аэропорта
for i in range(len(itinerary) - 1):
a1 = Airport.airportDict.get(itinerary[i])
Я использовал что-то подобное ранее в своем коде для создания взвешенного ориентированного графа.
graph = {}
for i in range(len(airportInput)):
graph[airportInput[i]] = {}
a1 = Airport.airportDict.get(airportInput[i])
это работало нормально, но в приведенном выше я получаю ошибку TypeError: unhashable type: 'list'
В указанном выше случае ввод аэропорта также является списком и был объявлен как таковой
airportInput = [row[0], row[1], row [2], row[3], row[4]]
Просто для пояснения, это основная функция, которую я пытаюсь использовать
def shortestPath (row):
airportInput = [row[0], row[1], row [2], row[3], row[4]]
aircraftInput = row[5]
graph = createGraph(airportInput, aircraftInput)
airportsToVisit = [row[1], row [2], row[3], row[4]]
originAirport = [row[0]]
iteneries = permute(airportsToVisit)
for perm in iteneries:
#perm.insert(0, originAirport)
perm.extend([originAirport, perm[0]])
print(perm)
print(cost(perm, aircraftInput))
моя функция перестановки
def permute(destinationList):
permutationTuples = permutations(destinationList)
return list([list(_) for _ in permutationTuples])
и стоимость
def cost(itinerary, aircraft):
air = Aircraft.airplaneDict.get(aircraft)
if air.units == 'imperial':
fuelCapacity = float(air.range) * 1.60934
else:
fuelCapacity =float(air.range)
distanceList = []
for i in range(len(itinerary) - 1):
a1 = Airport.airportDict.get(itinerary[i])
country = a1.country
currencyCode = CurrencyCode.currencyCodeDict.get(country).currencyCode
toEuroRate = float(currencyRate.currencyRateDict.get(currencyCode).toEuroRate)
lat1 = a1.lat
long1 = a1.long
a2 = Airport.airportDict.get(itinerary[i])
country = a2.country
lat2 = a2.lat
long2 = a2.long
distance = greatcircledist(long1, lat1, long2, lat2)
if distance > fuelCapacity:
return none
else:
distance *= toEuroRate
distanceList.append(distance)
return sum(distanceList)