Specific sort a list of numbers separated by dots
If you need to sort by all digits, produce a sequence of integers in the key function:
sorted(L, key=lambda v: [int(p) for p in v.split('.') if p.isdigit()])
This method is robust in the face of non-digit values between the dots.
Demo:
>>> L = ['1.1.1.', '1.1.10.', '1.1.11.', '1.1.12.', '1.1.13.', '1.1.2.', '1.1.3.', '1.1.4.']
>>> sorted(L, key=lambda v: [int(p) for p in v.split('.') if p.isdigit()])
['1.1.1.', '1.1.2.', '1.1.3.', '1.1.4.', '1.1.10.', '1.1.11.', '1.1.12.', '1.1.13.']
Your specific attempt only returns the second number in the list, which for your sample data is always 1
.
Just get the last part, convert that to an int and return it as the key for comparison
print(sorted(L, key=lambda x: int(x.split(".")[2])))
If you want all the parts to be considered, you can do like this
print(sorted(L, key=lambda x: [int(i) for i in x.rstrip(".").split(".")]))
It removes .
at the end of the strings, splits them based on .
and then converts each and every part of it to an int
. The returned list will be used for comparison.
You can read more about how various sequences will be compared by Python, here
Output
['1.1.1.','1.1.2.','1.1.3.','1.1.4.','1.1.10.','1.1.11.','1.1.12.','1.1.13.']