【问题标题】:How to sort a list of lists based on length of inner list?如何根据内部列表的长度对列表列表进行排序?
【发布时间】:2019-12-19 04:22:29
【问题描述】:

我想根据子列表中第二项的长度对列表列表进行排序,如下所示:

输入:

list = [['A', '1234', 'X'],['B', '12', 'X'],['C', '12345', 'X'],['D', '123', 'X']]

输出:

list = [['C', '12345', 'X'],['A', '1234', 'X'],['D', '123', 'X'],['B', '12', 'X']]

我目前拥有的是:

list = sorted(list, key=len, reverse=True)

但我不确定如何让它查看列表中特定项目的长度。提前致谢!

【问题讨论】:

  • 你不应该将你的变量命名为list,因为这是一个python内置函数

标签: python list sorting nested


【解决方案1】:

sortsorted 与自定义键一起使用。

例如:

data = [['A', '1234', 'X'],['B', '12', 'X'],['C', '12345', 'X'],['D', '123', 'X']]
data.sort(key=lambda x: len(x[1]), reverse=True)

sorted

data = sorted(data, key=lambda x: len(x[1]), reverse=True)

print(data)

【讨论】:

  • @ScottHunter 当然可以,但它会生成一个新列表。因此,如果您想更新现有的,创建一个新的并将其分配给旧的 (sorted-solution) 与更新旧的 (.sort-solution) 相比是浪费的。
  • 哇,真快!非常感谢拉克什!如果你不介意,我会潜入另一个相关的问题:在上面的例子中,让我们说整数中的第三项。我将如何对列表进行排序:1)按整数(首先是更高的值)2)如果是相同的整数,那么按您上面的解决方案。即 ['B', '12', '1'] 将排在 ['A', '123', '0'] 之前,如果您没有时间回答我,请不要担心!再次感谢
  • @Fred_Alb 看起来你需要key=lambda x: int(x[2])
  • @Rakesh 你又做到了!谢谢! key=lambda x: (int(x[2]), len(x[1])), reverse=True)
【解决方案2】:

你快到了:

data = [['A', '1234', 'X'],['B', '12', 'X'],['C', '12345', 'X'],['D', '123', 'X']]

out = sorted(data, key=lambda item: len(item[1]), reverse=True)

print(out)
#[['C', '12345', 'X'], ['A', '1234', 'X'], ['D', '123', 'X'], ['B', '12', 'X']]

请注意,您不应将列表命名为 list,因为这会掩盖内置函数的名称并导致以后出现问题...

【讨论】:

    猜你喜欢
    • 2021-06-17
    • 2015-08-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2018-02-23
    • 2020-07-21
    • 1970-01-01
    相关资源
    最近更新 更多