2012-10-20 154 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

相关问题