2014-02-11 59 views
1

我有一個名爲frequentItems的字符串列表和一個名爲mis(多項支持值)的值爲浮點數的字典。兩者之間的關係是frequentItems,i的任何元素是mis的關鍵,因此mis[frequentItems[i]]返回浮點值。根據字典中的值排序字符串的列表

我想根據從mis[frequentItems[i]]返回的浮點值對frequentItems進行排序,但我不確定如何使用.sort()sorted()指定此值。我基本上沒有使用lambda的經驗,但認爲這是我需要指定的。

回答

4

你甚至都不需要lambda在這裏,你可以簡單地使用dict.get獲得該值對應於列表中的元素。

frequentItems.sort(key = mis.get) 

實施例:

mis, frequentItems = {1: 3.4, 5: 3.14, 3: 7.5}, [1, 3, 5] 
frequentItems.sort(key = mis.get) 
print(frequentItems) # [5, 1, 3] 
+1

如此簡單,祝福Python。謝謝 – asimes

+1

啊好多了我被卡在教學lambdas:P –

+0

在python3.3請小心這一個。如果列表中包含的項不是字典中的鍵,則示例代碼將不起作用,因爲「None」無法與「float」進行比較。在這種情況下,您需要* @JoranBeasley的'lambda'解決方案,您明確提供了一個類似於'get'的類型。 – mgilson

1
def getItem(itemName): 
    return mis.get(itemName) 

frequentItems.sort(key=getItem) 

你可以粗重寫getItem作爲lambda函數

getItem = lambda itemName:mis.get(itemName,None) 
frequentItems.sort(key=getItem) 

,你可以把它作爲重點直接作爲拉姆達

frequentItems.sort(key= lambda itemName:mis.get(itemName,None)) 

你可以簡化你的論點,以單個字母

frequentItems.sort(key= lambda i:mis.get(i,None)) 

而Lambda表達式更短,他們可以慢

(或使用thefourtheye是這個實際的問題更好的解決方案:P)

+1

1'cmp'是從'key'完全不同的,CMP應該返回'-1,0或1',我相信。 2.'dict.get',默認返回'None'。所以,你可以簡單地做我喜歡的答案。 – thefourtheye

+0

oops漫長的一天:P –

+0

而最後一個例子根本不起作用:p – thefourtheye

相關問題