我有一个包含元素的列表:
['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,因为我的数字变成了双倍,三倍......数字。如何在不使用正则表达式的情况下对此列表进行排序?
(请不要列表很长,我写了上面列表的摘要版本)
答案 0 :(得分:2)
这样做:
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))
答案 1 :(得分:0)
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)
答案 2 :(得分:0)
如果没有正则表达式,并假设所有字符串的格式相同,您可以这样做:
mylist.sort(key = lambda x: int(''.join([i for i in x.split(',')[2] if i.isnumeric()])))
list comprehension [i for i in x.split(',')[2] if i.isnumeric()]
将您的字符串拆分为逗号,将索引为2的元素(将为“Count=___
”),并提取所有数字字符串。然后,int(''.join
将它们连接在一起并将其转换为整数。然后,您可以将此作为键来对列表进行排序。
答案 3 :(得分:0)
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']
count_dict = {}
for elem in lst:
temp_list = elem.split(',')
count = temp_list[2]
new_count = int(count.split('=')[1])
count_dict[new_count] = elem
new_list = []
for count in sorted(count_dict):
new_list.append(count_dict[count])
答案 4 :(得分:0)
您可以尝试使用Chris_Rands讲述的方法。
尝试通过拆分整个字符串来从字符串中提取Count参数的值。
sorted(lst, key=lambda x: int(x.split('Count=', 1)[1].split(',', 1)[0]))
上面的语句首先根据键'Count ='拆分字符串。因此可以忽略之前的字符串部分,因此我们使用索引1来获取字符串的第二部分。在这一部分中,我们再次将字符串拆分为','。然后忽略后面的部分。因此,通过使用索引0,我们只取了','之前的部分。最后,我们将此值解析为整数类型。
For ex. take '16:11:40.894 0,Type=IsXover,Count=1,lp-isD=2'
after splitting the string from 'Count=' and taking the value at index 0, we get '1,lp-isD=2'.
now splitting this from ',' and taking the value at index 0, we get '1'.
So after parsing this to function int(), we get the value of Count.