Python中元组的排序列表

2024-03-28 18:24:56 发布

您现在位置:Python中文网/ 问答频道 /正文

下面列出的元组已经排序,在python中为“sorted”:

L = [("1","blaabal"),
     ("1.2","bbalab"),
     ("10","ejej"),
     ("11.1","aaua"),
     ("12.1","ehjej"),
     ("12.2 (c)", "ekeke"), 
     ("12.2 (d)", "qwerty"), 
     ("2.1","baala"),
     ("3","yuio"),
     ("4","poku"),
     ("5.2","qsdfg")]

我的问题是,正如你所注意到的,一开始它是好的,尽管在“12.2(d)”之后列表重新开始在“2.1”之后,我不知道如何解决这个问题。在

谢谢


Tags: 列表排序元组sortedqwertyaauaqsdfgyuio
3条回答

有一个专门为您的案例制作的包^{}

>>> from natsort import natsorted
>>> L = [('1', 'blaabal'), ('4', 'poku'), ('12.2 (c)', 'ekeke'), ('12.1', 'ehjej')]
>>> natsorted(L)
[('1', 'blaabal'), ('4', 'poku'), ('12.1', 'ehjej'), ('12.2 (c)', 'ekeke')]

元组的第一个值是字符串,按字典顺序排序。如果您希望它们保持字符串,请使用

sorted(l, key = lambda x: float(x[0]))

由于每个元组中的第一个元素是字符串,因此Python正在执行lexographic排序,其中所有以'1'开头的字符串都在以'2'开头的字符串之前。在

为了获得所需的排序,您需要将第一个条目视为float而不是字符串。在

我们可以将sorted与自定义排序函数一起使用,该函数在排序之前将第一个条目转换为浮点。它还保留了第二个元组元素,以处理第一个条目可能不唯一的情况。在

result = sorted(L, key = lambda x: (float(x[0].split()[0]), x[1]))

# [('1', 'blaabal'), ('1.2', 'bbalab'), ('2.1', 'baala'), ('3', 'yuio'), ('4', 'poku'), ('5.2', 'qsdfg'), ('10', 'ejej'), ('11.1', 'aaua'), ('12.1', 'ehjej'), ('12.2 (c)', 'ekeke'), ('12.2 (d)', 'qwerty')]

我必须添加一个x[0].split()[0],这样我们就可以在空间中拆分第一个元组元素,并且只获取前几部分,因为有些元素的值是'12.2 (d)',而我们只需要'12.2'。在

把第一个元素的剩余部分转换成第一个元素,然后把它转换成第一个元素。在

^{pr2}$

相关问题 更多 >