0

I want to sort a list by a dictionary, as shown below:

The list:

L = ['Jack', 'King', '9', 'King', '10']

The dictionary:

D = {0:'Ace', 1:'King', 2:'Queen', 3:'Jack', 4:'10', 5:'9'}

I want to sort L based on keys of dictionary D, such that the output would be:

[ 'King', 'King', 'Jack', '10', '9' ]

I tried:

sorted(L, key = D.get)

but got error:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in 

----> 3 sorted(L, key = D.get)

TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'

Why did I get this error? Aren't the dictionary keys integers?


Update:

Similar question: Reverse / invert a dictionary mapping

nilsinelabore
  • 4,143
  • 17
  • 65
  • 122

3 Answers3

4

You can first create another dict which reverses the mapping of the original dict, then sort based on that.

revd = {v:k for k, v in D.items()}
res = sorted(L, key=revd.get)
Unmitigated
  • 76,500
  • 11
  • 62
  • 80
3

You can create a reverse mapping to map names to values instead:

R = dict(map(reversed, D.items()))
print(sorted(L, key=R.get))
blhsing
  • 91,368
  • 6
  • 71
  • 106
-2

A dictionary in python has two fields, key, and value.

dict{key: value}

The sort function doesn't know what to look for when it's sorting. You can create a normal function or a lambda function that returns the value based on which it should sort the list/dictionary and pass it in the key argument of the sort function.

like this

d.sort(key=lambda d:d[x]) 
# Set the value of x to 0 or 1 if you want to sort them by key or values respectively.

You can refer to this YouTube video