2011-11-23 36 views
0

所以這是我最好的「Like」要能寫:的Python:尋找根據字典中的最小值

cur_loc = min(open_set,key=lambda x:costs[x]) 

cur_loc是一個元組,而我們的目標是將其設置爲成本最低的open_set中的元組。 (並且您發現xcosts[x]的成本)

我怎麼能這樣做?我嘗試了Python.org的文檔min(),但我似乎找不到太多幫助。

謝謝!

編輯: 我解決了我自己的問題。

我被推遲了,並沒有初始化費用字典。我實際上是複製和粘貼別人的Python代碼,以測試他們在做什麼,但顯然他們創建的代碼片段不包括初始化部分。 Woops。如果有人有興趣:

 for row in range(self.rows): 
      for col in range(self.cols): 
       myloc = (row,col) 
       if (myloc) not in closed_set: 

        costs[myloc] = (abs(end_row-row)+abs(end_col - col))*10 

        if (myloc) not in open_set: 
         open_set.add(myloc) 

        parents[myloc] = cur_loc 

     cur_loc = min(open_set,key=lambda x:costs[x]) 
+1

你需要提供一個'open_set'和相關的'costs'字典的例子。也。爲什麼這些相互分離? 'open_set'是'costs'中的一些項目子集?它是一個適當的'set'實例嗎? –

回答

5

爲我工作。你有什麼問題?

>>> costs = { '1': 1, '2': 2, '3': 3 } 
>>> open_set = set(['1','2']) 
>>> min(open_set,key=lambda x:costs[x]) 
'1' 
+0

OP指定* open_set *由元組組成,並且這個確切的代碼對他不起作用,所以問題可能是成本字典查找不接受元組作爲關鍵字。 IOW,這個迴應似乎不是一個真正的答案。 –

+0

@RaymondHettinger:「OP指定open_set由元組組成」?真?我怎麼錯過了?你能否提供問題中的確切引用,以便人們適當地降低我的評價? –

+0

「......目標是將其設置爲** ** open_set中的元組......」 – Ben

3

如果cost[x]是以元組作爲關鍵字的字典查找,那麼您提供的將是正確的。我想你可能是想爲這個元組提取一個字段並查找這個字段的開銷:

>>> costs = dict(red=10, green=20, blue=30) 
>>> open_set = {('red', 'car'), ('green', 'boat'), ('blue', 'plane')} 
>>> min(open_set, key=lambda x: costs[x[0]]) 
('red', 'car')