如何自然地对包含相似值的列表进行排序

问题描述

我有一个像这样的字符串列表: ['id:9','vector:1','table:1','product:10','number:3','Number:4']

我想将它从较高的整数值排序到较低的值,然后是其余的: ['product:10','id:9','Number:4','table:1']

值都是整数,不包括0,附加的字符串可以全小写,全大写,部分小写,部分大写,同时也可以类似于另一个项目:Number,NUMBER,number,数字

我尝试使用 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','vector:1']

如果您想了解幕后发生的事情,这里会显示实际排序的内容(按升序):

l = ['id:9','Number:4']
[negative_num_then_name(elem) for elem in l]

[(-9,'id'),(-1,'vector'),'table'),(-10,'product'),(-3,'number'),(-4,'Number')]

sort 首先查找每个元组的第一个元素 - 整数 - 只有在平局的情况下才查找第二个元素 - 字符串。