python使用lambda函数对列表进行多条件排序

2024-05-15 20:36:31 发布

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

lst = ["g1 act car", "a8 act zoo", "a2 act car"]

我想对列表进行排序,以便:

  1. 忽略每个字符串的第一个标记,字符串按字典顺序排列
  2. 如果有领带,请按第一个代币订购

排序后的上述列表应如下所示:

lst = ["a2 act car", "g1 act car", "a8 act zoo"]

我想在一行中编写排序代码。我可以为第一个条件编写如下代码:

lst = sorted(lst, key = lambda x : x.split()[1])

如何在这个lambda表达式中也组合第二个条件?你知道吗


Tags: lambda字符串代码标记a2列表字典排序
3条回答

尝试使用:

lst = sorted(lst, key = lambda x : [x.split()[1:], x.split()[0]])

现在:

lst

结果如下:

['a2 act car', 'g1 act car', 'a8 act zoo']

尝试使用:

lst = sorted(lst, key = lambda x : (x.split(None, 1)[1], x.split()[0]))

现在:

print(lst)

是:

['a2 act car', 'g1 act car', 'a8 act zoo']

我会这样做:

lst = ["g1 act car","a8 act zoo","a2 act car"]
lst = sorted(lst, key=lambda x:x.split(None,1)[::-1])
print(lst)

输出:

['a2 act car', 'g1 act car', 'a8 act zoo']

说明:x.split(None,1)在第一个空格(或其他分隔符)处剪切,因此我得到带有1st tokenrest的列表,然后将它们反转,因此[rest,1st token]被用作key,因此如果相同的rest出现多次,它将按rest排序,然后按1st token排序。你知道吗

相关问题 更多 >