I have list ["Tue", "Wed", "Mon", "Thu", "Fri"]
as list, I want to make it as
["Mon", "Tue", "Wed", "Thu", "Fri"]
.
How to sort this?
Not very efficient, but if you have a list of the order they're supposed to be in...
>>> m = ["Mon", "Tue", "Wed", "Thu", "Fri"]
>>> n = ["Tue", "Wed", "Mon", "Thu", "Fri", "Tue", "Mon", "Fri"]
>>> sorted(n, key=m.index)
['Mon', 'Mon', 'Tue', 'Tue', 'Wed', 'Thu', 'Fri', 'Fri']
Note, this will throw an exception if a certain value is present in n
that isn't in m
.
Or put them into a dict with name as key and order as value, then use key=your_dict.get
as a key... something like:
>>> d = {name:val for val, name in enumerate(m)}
>>> d
{'Fri': 4, 'Thu': 3, 'Wed': 2, 'Mon': 0, 'Tue': 1}
>>> sorted(n, key=d.get)
['Mon', 'Mon', 'Tue', 'Tue', 'Wed', 'Thu', 'Fri', 'Fri']
This won't throw an exception (except on Py3.x where you'll get an error on trying to sort None
), but you could use a partial to sensible, sort before or after default, or to get equivalent behaviour of list.index
, use key=d.__getitem__
or similar
Find and replace all instances of monday with 1, tuesday with 2, etc sort, reassign.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With