2

I have a list of Dictionaries. Say

[{'name':'Homer', 'age':39, 'desg':'A'}, {'name':'Bart', 'age':10, 'desg':'A'},
{'name':'Lucy', 'age':27, 'desg':'C'}, {'name':'John', 'age':18, 'desg':'B'},
{'name':'Aryan', 'age':20, 'desg':'C'}]

I want to sort this list with desg in order of A,C,B.

I can sort it in A,B,C by sorted(list, lambda x: x['desg']) and reverse by using reverse=True flag, but unable to sort it in the above mentioned pattern.

Mohammad Yusuf
  • 16,554
  • 10
  • 50
  • 78
imchandan
  • 23
  • 7
  • 2
    list.sort(key=lambda x: x['desg']) – yslee Jan 30 '17 at 06:33
  • 1
    missing commas . [{'name':'Homer', 'age':39, 'desg':'A'}, {'name':'Bart', 'age':10, 'desg':'A'}, {'name':'Lucy', 'age':27, 'desg':'C'}, {'name':'John', 'age':18, 'desg':'B'}, {'name':'Aryan', 'age':20, 'desg':'C'}] – Vidya Sagar Jan 30 '17 at 06:34

1 Answers1

4

First, define the order of your keys:

order = {'A':0, 'B':2, 'C':1}

Now, sort in that order:

sorted(l, key=lambda x:order[x['desg']])
#[{'name': 'Homer', 'age': 39, 'desg': 'A'}, 
# {'name': 'Bart', 'age': 10, 'desg': 'A'}, 
# {'name': 'Lucy', 'age': 27, 'desg': 'C'}, 
# {'name': 'Aryan', 'age': 20, 'desg': 'C'}, 
# {'name': 'John', 'age': 18, 'desg': 'B'}]
DYZ
  • 55,249
  • 10
  • 64
  • 93