Sort a list based on dictionary values in python?

dictionary, list, python, sorting

Solution

Yes dict.get is the correct (or at least, the simplest) way:

sorted(trial_list, key=trial_dict.get)

As Mark Amery commented, the equivalent explicit lambda:

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

might be better, for at least two reasons:

- the sort expression is visible and immediately editable

- it doesn't suppress errors (when the list contains something that is not in the dict).

Problem

Say I have a dictionary and then I have a list that contains the dictionary's keys. Is there a way to sort the list based off of the dictionaries values? I have been trying this: ``` trial_dict = {'*':4, '-':2, '+':3, '/':5} trial_list = ['-','-','+','/','+','-','*'] ``` I went to use: ``` sorted(trial_list, key=trial_dict.values()) ``` And got: ``` TypeError: 'list' object is not callable ``` Then I went to go create a function that could be called with `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))) ``` I don't think the `sort_help` function is having any affect on the sort though. I'm not sure if using `trial_dict.get()` is the correct way to go about this either.

Original source