20

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

我一直在尝试这个:

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功能对排序有任何影响。我不确定 usingtrial_dict.get()是否也是解决此问题的正确方法。

4

2 回答 2

20

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

sorted(trial_list, key=trial_dict.get)

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

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

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

  1. 排序表达式可见且可立即编辑
  2. 它不会抑制错误(当列表包含不在字典中的内容时)。
于 2012-10-20T09:49:43.827 回答
8

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

sorted(trial_list, key=lambda x: trial_dict[x])
于 2012-10-20T09:46:25.940 回答