How i can use python to sort the list format
format=[\"12 sheet\",\"4 sheet\",\"48 sheet\",\"6 sheet\", \"busrear\", \"phonebox\",\"train\"]
<
The same solution can be used here
print sorted(format_data, key=lambda x: (int(x[1].split(None, 1)[0]) if x[1][:1].isdigit() else 999, x))
Note the x[1]
instead of just x
. x[1]
means the second element in x
.
Result:
[[2, '4 sheet', 0],
[4, '6 sheet', 0],
[1, '12 sheet', 0],
[3, '48 sheet', 0],
[5, 'Busrear', 0],
[6, 'phonebox', 0],
[7, 'train', 0]]
You can do this:
lst = [[1L, u'12 sheet', 0],
[2L, u'4 sheet', 0],
[3L, u'48 sheet', 0],
[4L, u'6 sheet', 0],
[5L, u'Busrear', 0],
[6L, u'phonebox', 0],
[7L, u'train', 0]]
def sortby(x):
try:
return int(x[1].split(' ')[0])
except ValueError:
return float('inf')
lst.sort(key=sortby)
print lst
Output:
[[2L, u'4 sheet', 0], [4L, u'6 sheet', 0], [1L, u'12 sheet', 0], [3L, u'48 sheet', 0], [5L, u'Busrear', 0], [6L, u'phonebox', 0], [7L, u'train', 0]]
You can always use fancier list comprehension but readability counts. Which is why you might not feel like modifying the cool solution by falsetru for this slightly changed task.
a = [5,1,"a","A",2]
a = list(map(int,filter(lambda x:x.isdigit(),sorted(map(str,a)))))+list(filter(lambda x:x.isalpha(),sorted(map(str,a))))
print(a)
You can trivially sort a list of strings with built-in sorted
method. Even if the objects in your list are more complex, you can still use sorted
. Just pass a custom key parameter to use the second item from the inner list as the key in ordering comparisons:
result = sorted(format, key=lambda x: x[1])
Finally switch to your sorting function natsorted (from natsort package) and you end up with the desired, naturally sorted, result list:
from natsort import natsorted
result = natsorted(format, key=lambda x: x[1])
you can use sorted
or list.sort
>>> format.sort(key=lambda x: (x[1]))
[[1L, u'12 sheet', 0], [2L, u'4 sheet', 0], [3L, u'48 sheet', 0], [4L, u'6 sheet', 0], [5L, u'Busrear', 0], [6L, u'phonebox', 0], [7L, u'train', 0]]