【问题标题】:Sorting nested lists in python [duplicate]在python中对嵌套列表进行排序[重复]
【发布时间】:2019-02-24 21:35:33
【问题描述】:

我有一个嵌套列表

list_a = 
[['1 order', 15, 3 ],
['1 order', 29, 2],
['1 order', 5, 1],
['2 order', 2, 3],
['2 order', 1, 2],
['2 order', 17, 1],
['3 order', 2, 3],
['3 order', 10, 2],
['3 order', 1, 1]]

对第二个元素应用排序后

sort_by_second_attribute = sorted(list_a, key = lambda k : k[1])

输出是

[['2 order', 1, 2],
['3 order', 1, 1],
['2 order', 2, 3],
['3 order', 2, 3],
['1 order', 5, 1],
['3 order', 10, 2],
['1 order', 15, 3],
['2 order', 17, 1],
['1 order', 29, 2]] 

但是,我想保持第一个属性的排序顺序,然后对第二个属性进行排序。我想要的输出是

[['1 order', 5, 3],
['1 order', 15, 2],
['1 order', 29, 1],
['2 order', 1, 3],
['2 order', 2, 2],
['2 order', 17, 1],
['3 order', 1, 3],
['3 order', 2, 2],
['3 order', 10, 1]] 

【问题讨论】:

  • 您要问的是(几乎)默认排序机制:sorted_list = sorted(list_a)

标签: python list


【解决方案1】:

sort_by_second_attribute = sorted(list_a, key = lambda k : (k[0], k[1]))

但理想情况下,不要将数据存储在列表中,而是为其创建适当的对象。因为从您的代码中完全不清楚 index=1 或 index=2 的含义,所以这些索引下存储了哪些数据。

【讨论】:

  • 这会引发语法错误,请参阅其他答案
【解决方案2】:

您可以通过制作元组来使用辅助排序条件

list_b = sorted(list_a, key=lambda k: (k[0], k[1]))
(xenial)vash@localhost:~/python/stack_overflow$ python3.7 helping.py 
[['1 order', 5, 1], ['1 order', 15, 3], ['1 order', 29, 2], ['2 
order', 1, 2], ['2 order', 2, 3], ['2 order', 17, 1], ['3 order', 1,
1], ['3 order', 2, 3], ['3 order', 10, 2]]

【讨论】:

    【解决方案3】:

    您可以从您的key 返回一个元组,例如key = lambda k : (k[1], k[2]),并且属性按该顺序排序。

    【讨论】:

      猜你喜欢
      • 2018-10-20
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 2019-01-17
      • 1970-01-01
      相关资源
      最近更新 更多