根据python中的字典值对列表进行排序?

时间:2012-10-20 09:44:39

标签: python list sorting dictionary

说我有一本字典然后我有一个包含字典键的列表。有没有办法根据字典值对列表进行排序?

我一直在尝试这个:

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()是否也是正确的方法。

2 个答案:

答案 0 :(得分:13)

dict.get是正确的(或至少是最简单的)方式:

sorted(trial_list, key=trial_dict.get)

正如Mark Amery评论的那样,等效的显式lambda:

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

可能会更好,至少有两个原因:

  1. 排序表达式可见且可立即编辑
  2. 它不会抑制错误(当列表包含不在dict中的内容时)。

答案 1 :(得分:5)

sorted内置函数(或sort列表方法)中的关键参数必须是一个函数,它将您要排序的列表成员映射到要排序的值。所以你想要这个:

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