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的情况下,才会查找第二个元素-字符串