如何根据列表中的某些标志对列表进行分组和排序?

男孩

我正在研究一个自动化问题,我最终得到一个看起来像这样的列表列表:

in_list=[ ['data_1_1', 'id_1', True, False, False, False, 'data_1_5'],
          ['data_2_1', 'id_1', False, True, False, False, 'data_2_5'],
          ['data_3_1', 'id_2', True, False, False, False, 'data_3_5'],
          ['data_4_1', 'id_1', True, False, False, False, 'data_4_5'],
          ['data_5_1', 'id_1', False, True, False, False, 'data_5_5'],
          ['data_6_1', 'id_2', True, False, False, False, 'data_6_5'] ]

我想根据 id(每个列表中的第 2 个元素)对列表进行分组,并根据标志(列表的第 3、第 4、第 5、第 6 个元素)对其进行排序,

预期输出:

out_list=[ ['data_1_1', 'id_1', True, False, False, False, 'data_1_5'],
           ['data_4_1', 'id_1', True, False, False, False, 'data_4_5'],
           ['data_2_1', 'id_1', False, True, False, False, 'data_2_5'],
           ['data_5_1', 'id_1', False, True, False, False, 'data_5_5'],
           ['data_3_1', 'id_2', True, False, False, False, 'data_3_5'],
           ['data_6_1', 'id_2', True, False, False, False, 'data_6_5'] ]

说明:out_list按照与 id 相同的顺序分组,并根据真/假标志进一步排序,(简单地说,具有相同标志集和相同 id 的列表聚集在一起)

到目前为止,我正在遍历整个列表列表并逐个检查元素,这既不是 Pythonic 也不是可扩展的。有更快/更好的方法吗?

普拉纳夫·霍桑加迪

您的预期输出没有对任何内容进行分组,只是对外部列表中的元素进行排序。

由于您想按 ID 排序,然后按标志排序,请使用包含这些元素的内部列表切片作为排序键

in_list=[ ['data_1_1', 'id_1', True, False, False, False, 'data_1_5'],
          ['data_2_1', 'id_1', False, True, False, False, 'data_2_5'],
          ['data_3_1', 'id_2', True, False, False, False, 'data_3_5'],
          ['data_4_1', 'id_1', True, False, False, False, 'data_4_5'],
          ['data_5_1', 'id_1', False, True, False, False, 'data_5_5'],
          ['data_6_1', 'id_2', True, False, False, False, 'data_6_5'] ]

sorted(in_list, key=lambda x: x[1:6])

这给出了这个:

[['data_2_1', 'id_1', False, True, False, False, 'data_2_5'],
 ['data_5_1', 'id_1', False, True, False, False, 'data_5_5'],
 ['data_1_1', 'id_1', True, False, False, False, 'data_1_5'],
 ['data_4_1', 'id_1', True, False, False, False, 'data_4_5'],
 ['data_3_1', 'id_2', True, False, False, False, 'data_3_5'],
 ['data_6_1', 'id_2', True, False, False, False, 'data_6_5']]

如果True要先对标志进行排序,则必须在key函数中将它们取反。

>>> sorted(in_list, key=lambda x: [x[1]] + [not f for f in x[2:6]])

[['data_1_1', 'id_1', True, False, False, False, 'data_1_5'],
 ['data_4_1', 'id_1', True, False, False, False, 'data_4_5'],
 ['data_2_1', 'id_1', False, True, False, False, 'data_2_5'],
 ['data_5_1', 'id_1', False, True, False, False, 'data_5_5'],
 ['data_3_1', 'id_2', True, False, False, False, 'data_3_5'],
 ['data_6_1', 'id_2', True, False, False, False, 'data_6_5']]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据内部列表中的字段对Java中的两个嵌套列表进行排序和分组

如何根据每个元素中的某些信息对列表中的元素进行分组?

如何根据某些列对列表字典进行排序?

根据对象字段的分组对列表进行排序,根据组中的最大值进行排序

如何按降序对列表和分组依据进行排序?

在Python中对嵌套列表进行排序和分组

在Kotlin中对单个列表进行分组和排序的更好方法

对列表中的前 3 个值进行分组和排序

在java中对数组列表进行分组和排序

如何根据日期对wordpress中的帖子进行分组和排序?

如何从rails上的ruby的有序列表中对子查询进行排序和分组

如何使用分组通过对流中的对象列表进行排序和归约

使用Lambda对列表进行排序和分组

对字典列表进行排序和分组

对对象列表进行排序和分组

如何根据字典中的部分键对字典列表进行分组

如何根据名称对列表中的文件进行分组?

根据日期在jquery和handlebar中对列表标签进行排序

如何根据 dateTIme 和 TimeOfDay 对 flutter/dart 中的列表项进行排序?

对列表中的项目进行排序/分组

如何根据 Python 中的日期时间对字典列表进行排序

如何根据Scala中的对象字段对列表对象进行排序?

如何根据内容在Python中对列表进行重新排序

如何根据元组列表中的值对元组进行排序

如何根据面值对 dart 中的整数列表进行排序?

如何根据子列表的长度对列表列表进行排序

如何根据内部列表的长度对列表列表进行排序?

如何根据列表中的相同设置值对列表列表进行排序?

如何根据时间对字典列表进行排序