根据元素中的值对列表进行排序

2024-05-19 03:02:45 发布

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

我有一个包含元素的列表:

['16:11:40.894 0,Type=IsXover,Count=1,lp-isD=2'
 '16:11:40.894 0,Type=IsXover,Count=54,lp-xsD=1'
 '16:11:40.894 0,Type=IsXover,Count=201,lr-isD=3'
 '16:11:40.894 0,Type=IsXover,Count=3075,lp-gsD=5']

我想根据“Count=”后面的数字对列表排序。 我不能用.sort(key=lambda x:x[37])做它,正如人们所说的here,因为我的数字变成了两位数,三位数。。。数字。不使用regex如何对列表排序?你知道吗

(请不要把清单写得太长,我在上面写了一个摘要)


Tags: lambdakey元素列表排序typecount数字
3条回答

如果没有regex,并且假设所有字符串的格式都相同,则可以执行以下操作:

mylist.sort(key = lambda x: int(''.join([i for i in x.split(',')[2] if i.isnumeric()])))

列表理解[i for i in x.split(',')[2] if i.isnumeric()]在逗号处拆分字符串,获取索引2处的元素(即“Count=___”),并提取所有数字字符串。然后,int(''.join将它们连接在一起并将其转换为整数。然后,您可以使用它作为键来对列表进行排序。你知道吗

这样做:

to_sort = ['16:11:40.894 0,Type=IsXover,Count=201,lr-isD=3',
           '16:11:40.894 0,Type=IsXover,Count=54,lp-xsD=1',
           '16:11:40.894 0,Type=IsXover,Count=1,lp-isD=2',
           '16:11:40.894 0,Type=IsXover,Count=3075,lp-gsD=5']
def key(x:str):
    return int(x.partition("Count=")[2].partition(",")[0])

print(sorted(to_sort, key=key))
lst = ['16:11:40.894 0,Type=IsXover,Count=1,lp-isD=2',
       '16:11:40.894 0,Type=IsXover,Count=54,lp-xsD=1',
       '16:11:40.894 0,Type=IsXover,Count=201,lr-isD=3',
       '16:11:40.894 0,Type=IsXover,Count=3075,lp-gsD=5']

def extract_num(text):
    txt1 = text[text.find("Count=")+6:]
    txt2 = txt1[:txt1.find(",")]
    return int(txt2)

lst.sort(key=extract_num)

print(lst)

相关问题 更多 >

    热门问题