Python 如何对包含相似值的列表进行自然排序
我有一个字符串列表,如下所示:Python 如何对包含相似值的列表进行自然排序,python,list,sorting,natural-sort,natsort,Python,List,Sorting,Natural Sort,Natsort,我有一个字符串列表,如下所示: ['id:9','vector:1','table:1','product:10','number:3','number:4'] 我想将其从较高的整数值排序到较低的整数值,然后再排序其余的整数值: ['product:10'、'id:9'、'Number:4'、'Number:3'、'vector:1'、'table:1'] 这些值都是整数,不包括0,附加到它们的字符串可以是全小写、全大写、部分小写、部分大写,同时也类似于另一项:数字、数字、数字、数字 我尝试过使
['id:9','vector:1','table:1','product:10','number:3','number:4']
我想将其从较高的整数值排序到较低的整数值,然后再排序其余的整数值:
['product:10'、'id:9'、'Number:4'、'Number:3'、'vector:1'、'table:1']
这些值都是整数,不包括0,附加到它们的字符串可以是全小写、全大写、部分小写、部分大写,同时也类似于另一项:数字、数字、数字、数字
我尝试过使用natsort,但没有正确地排列它们,我还尝试过这里讨论的一些其他解决方案,但在我的案例中仍然不起作用,因此如何在python中实现这一点?如果创建一个函数,将每个字符串转换为元组,则可以对这些元组进行排序:
l = ['id:9', 'vector:1', 'table:1', 'product:10', 'number:3', 'Number:4']
def negative_num_then_name(s):
name, num_str = s.split(':')
return -int(num_str), name
l.sort(key=negative_num_then_name)
l
['product:10', 'id:9', 'Number:4', 'number:3', 'table:1', 'vector:1']
如果您想了解封面下发生了什么,这将显示实际排序的内容(升序):
sort
首先查找每个元组的第一个元素-整数,只有在平局的情况下,才会查找第二个元素-字符串。如果创建一个函数将每个字符串转换为元组,则可以对这些元组进行排序:
l = ['id:9', 'vector:1', 'table:1', 'product:10', 'number:3', 'Number:4']
def negative_num_then_name(s):
name, num_str = s.split(':')
return -int(num_str), name
l.sort(key=negative_num_then_name)
l
['product:10', 'id:9', 'Number:4', 'number:3', 'table:1', 'vector:1']
如果您想了解封面下发生了什么,这将显示实际排序的内容(升序):
sort
首先查找每个元组的第一个元素-整数-只有在出现tie的情况下,才会查找第二个元素-字符串