我正在研究一个自动化问题,我最终得到一个看起来像这样的列表列表:
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] 删除。
我来说两句