I'm pretty new to python and I'm looking for a way to sort a list placing words before numbers.
I understand you can use sort to do the following :
a = ['c', 'b', 'd', 'a']
a.sort()
print(a)
['a', 'b', 'c', 'd']
b = [4, 2, 1, 3]
b.sort()
print(b)
[1, 2, 3, 4]
c = ['c', 'b', 'd', 'a', 4, 2, 1, 3]
c.sort()
print(c)
[1, 2, 3, 4, 'a', 'b', 'c', 'd']
However I'd like to sort c to produce :
['a', 'b', 'c', 'd', 1, 2, 3, 4]
Thanks in advance
解决方案
You could provide a custom key argument which gives a lower value to strings than it does to ints:
>>> c = ['c', 'b', 'd', 'a', 4, 2, 1, 3]
>>> c.sort(key = lambda item: ([str,int].index(type(item)), item))
>>> c
['a', 'b', 'c', 'd', 1, 2, 3, 4]