Sometimes, we want to correctly sort a string with a number inside with Python.
In this article, we’ll look at how to correctly sort a string with a number inside with Python.
How to correctly sort a string with a number inside with Python?
To correctly sort a string with a number inside with Python, we can create our own function to return the natural keys to sort by.
For instance, we write
import re
def atoi(text):
return int(text) if text.isdigit() else text
def natural_keys(text):
return [atoi(c) for c in re.split(r"(\d )", text)]
alist = [
"something1",
"something12",
"something17",
"something2",
"something25",
"something29",
]
alist.sort(key=natural_keys)
print(alist)
to create the atoi function that return the text convert to an int if text is all digits.
Otherwise, we return text.
Then we define the natural_keys function to return the natural keys by returning a list that has the values returned by atoi after splitting the text value by a digit.
Next, we call alist.sort with the key argument set to naturali_keys to sort alist in place by the natural keys.
Conclusion
To correctly sort a string with a number inside with Python, we can create our own function to return the natural keys to sort by.