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ただし、関数がソートに影響を与えているとは思いません。trial_dict.get()使用することがこれを行う正しい方法であるかどうかもわかりません。

4

2 に答える 2

20

はい、 dict.getは正しい(または少なくとも最も単純な)方法です:

sorted(trial_list, key=trial_dict.get)

Mark Ameryがコメントしたように、同等の明示的なラムダ:

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

少なくとも2つの理由から、より良いかもしれません。

  1. 並べ替え式が表示され、すぐに編集可能
  2. エラーは抑制されません(リストにdictにないものが含まれている場合)。
于 2012-10-20T09:49:43.827 に答える
8

sorted組み込み関数(またはリストのメソッド)の重要な引数は、sort並べ替えるリストのメンバーを並べ替える値にマップする関数である必要があります。だからあなたはこれが欲しい:

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