Sort elements with specific order in python
Try this:
sorted(input, key=lambda v: my_own_order.index(v['value']))
Taking an input and set the order in my_order and it will print in that order
enter code here
user_input = input()
my_order = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1357902468'
print(*sorted(user_input, key=my_order.index),sep='')
>>> lst = [
... {'value': "typeA"},
... {'value': "typeC"},
... {'value': "typeB"},
... {'value': "typeC"},
... {'value': "typeB"},
... {'value': "typeA"}
... ]
>>> my_own_order = ['typeB', 'typeC', 'typeA']
Make a mapping between typeB
, typeC
, typeA
to 0, 1, 2
>>> order = {key: i for i, key in enumerate(my_own_order)}
>>> order
{'typeA': 2, 'typeC': 1, 'typeB': 0}
And use the mapping for sorting key:
>>> sorted(lst, key=lambda d: order[d['value']])
[{'value': 'typeB'},
{'value': 'typeB'},
{'value': 'typeC'},
{'value': 'typeC'},
{'value': 'typeA'},
{'value': 'typeA'}]