我正在尝试访问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)
答案 0 :(得分:1)
@rhanly,print(perm)打印什么?
@ palivek [' LHR',' SYD',' JFK',' AAL',' DUB&#39 ;],' LHR']
有你的问题。如果是i == 4
,那么itinerary[i] == ['DUB']
。 ['DUB']
是一个列表,它不是有效的字典键,因为它是可变的。
答案 1 :(得分:0)
看起来您尝试使用列表作为字典的键。
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');`
错误可能在airportInput = [row[0], row[1], row [2], row[3], row[4]]
,也在graph[airportInput[0]]
您正在有效地尝试,a1 = Airport.airportDict.get(airportInput[0])
错误表明graph(row[0])
的类型为List?
无论哪种方式,尝试添加一些print语句,以查看在引发异常之前实际值是什么。我想你会感到惊讶。
顺便说一句,你知道拼接......你可以row[0]
。如果您还没有,也许请花时间浏览最新的Python教程Python 3 Tutorial或Python 2 Tutorial。它不需要很长时间,但它确实可以帮到你。
希望这有帮助。