2012-10-20 211 views
8

說我有一本字典,然後我有一個列表,其中包含字典的鍵。有沒有辦法根據字典值對列表進行排序?基於Python中的字典值對列表進行排序?

我一直想這樣的:

trial_dict = {'*':4, '-':2, '+':3, '/':5} 
trial_list = ['-','-','+','/','+','-','*'] 

我去使用:

sorted(trial_list, key=trial_dict.values()) 

,並得到:

TypeError: 'list' object is not callable 

然後我就去創造這可能是一個功能用trial_dict.get()調用:

def sort_help(x): 
    if isinstance(x, dict): 
     for i in x: 
      return x[i] 

sorted(trial_list, key=trial_dict.get(sort_help(trial_dict))) 

我不認爲sort_help函數對排序有任何影響。我不確定使用trial_dict.get()是否是正確的方法。

回答

8

dict.get是正確的(或至少,最簡單的)方式:

sorted(trial_list, key=trial_dict.get) 

正如馬克·阿梅里奧評論,等效明確拉姆達:

sorted(trial_list, key=lambda x: trial_dict[x]) 

可能會更好,至少有兩個原因:

  1. 排序表達式是可見的並且可立即編輯
  2. 它不會抑制錯誤(當列表包含不在dict中的內容時)。
+0

Oi,停止跳出我正在回答的問題並給出更聰明的答案! :) 更嚴重:這個答案與我的行爲有一個不同之處。如果trial_values包含的值不是trial_dict的關鍵字,Mine會發出異常,而thg會默默地將該值排序在前面。根據具體情況可能是合適的。 –

+0

@ thg435我應該雙重檢查文檔,我明顯誤解'.get'。 – tijko

+0

@MarkAmery:[你很好,小子,真好。但是隻要我在身邊,你永遠是第二好的,看看?](http://www.imdb.com/title/tt0110475/quotes))) – georg

5

內建函數sorted(或列表的sort方法)中的關鍵參數必須是一個函數,它將您正在排序的列表的成員映射到要排序的值。所以,你要這樣:

sorted(trial_list, key=lambda x: trial_dict[x]) 
+0

對於像這樣的小函數,我應該記住lambda。我將thg435標記爲已回答,但這對我來說真的很有幫助,我不得不考慮使用lambda表示未來的使用,謝謝! :) – tijko

相關問題