在Python中对列表列表进行唯一排序

时间:2012-07-17 16:33:42

标签: python list sorting large-data

我有一份清单清单 -

super_list = [seconds, self.flowdata, key]

其中秒是十位数,自我。 flowdata是160个整数的列表,key是一个标识字符串。打印super_list将产生以下结构的多次迭代,所有迭代都具有不同的值,

示例:

"[[1509321600], 
  ['1', '-1', '4', '7', '7', '1', '-8', '-14', '-24', '-29', '-25', '-24', '-9', '-4', '0', '0', '-5', '-10', '-6', '-5', '7', '-4', '-4', '-11', '5', '3', '9', '5', '3', '3', '6', '-6', '-8', '-6', '-6', '25', '23', '30', '22', '13', '-7', '0', '-1', '-18', '-24', '-28', '-24', '-24', '-18', '-14', '-14', '-12', '-13', '-11', '-15', '-16', '-8', '-3', '-4', '-2', '11', '29', '38', '40', '41', '29', '34', '25', '20', '15', '31', '22', '16', '2', '8', '21', '39', '43', '45', '38', '39', '37', '38', '41', '43', '42', '38', '34', '34', '25', '25', '29', '18', '23', '27', '26', '18', '15', '15', '11', '17', '10', '11', '4', '-3', '-12', '-17', '-14', '6', '5', '13', '4', '-21', '-22', '-16', '-12', '-6', '4', '16', '9', '17', '16', '16', '16', '15', '12', '12', '7', '-2', '-12', '-13', '-5', '-7', '-8', '-12', '-15', '-14', '-11', '-8', '-1', '-1', '-3', '-12', '-7', '-6', '-7', '5', '4', '2', '3', '1', '0', '-12', '-12', '-13', '-17', '-18', '-18', '-15', '-13', '-13', '-16', '-17', '-18', '-18', '-19', '-16', '-13'], 
  '1441-4731-1-10/30/2017']

每一组(如果你喜欢,如上所述,如上所述)的秒,flowdata和key是相关的。

我想对super_list进行排序,以便秒从最小到最大排序,但也与其相关的flowdata和key在super_list中的相同数字'row'中排序。

即。说上面的例子是排序列表中的第一个(1509321600是秒列表中最小的秒数),上面的flowdata也是flowdata中的第一个,上面的键是“1441-4731-1-10 / 30/2017“将是第一把钥匙。

帮助?

2 个答案:

答案 0 :(得分:0)

假设您的列表如下:[[seconds1, flowdata1, key1], [seconds2, flowdata2, key2], ...]

只需使用super_list.sort()

这将按字典(从左到右)顺序排序。由于seconds是最左边的字段,因此所有条目都将按其排序。

您还可以使用key sort参数对特定字段进行排序,例如:

super_list.sort(key=lambda row: row[0]) #sort by seconds field

答案 1 :(得分:0)

您可以将列表压缩为元组,然后对元组列表进行排序,然后使用列表解析解压缩元组,如下所示:

super_list = [seconds, flowdata, key for zipped_tuple in sorted(zip(super_list[0], super_list[1], super_list[2]))]

其中,seconds,flowdata,key和zipped_tuple是任意名称,没有超出列表推导范围的范围。