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,附加到它们的字符串可以是全部小写,全部大写,部分小写,部分大写,同时也类似于另一个项目:Number,NUMBER,number,NUMber

我尝试使用 natsort 但没有正确安排它们,我也尝试了这里讨论的其他一些解决方案在我的情况下仍然不起作用,那么如何在 python 中完成呢?

4

1 回答 1

2

如果您创建一个将每个字符串转换为元组的函数,则可以对这些元组进行排序:

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']

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

l = ['id:9', 'vector:1', 'table:1', 'product:10', 'number:3', 'Number:4']
[negative_num_then_name(elem) for elem in l]

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

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

于 2021-05-05T04:49:59.883 回答