2012-07-17 55 views
0

列出的名單上有一個列表的列表 -獨特排序在Python

super_list = [seconds, self.flowdata, key] 

其中seconds是一個十個位數,自我。 flowdata是一個160個整數的列表,鍵是一個標識字符串。印刷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和密鑰是相關。

我想對super_list進行排序,以便seconds從最小值到最大值排序,而且還將其與super_list中相同的數字「行」中的流數據和鍵相關聯。

ie即上面的例子是排序列表中的第一個(1509321600是秒列表中的最小秒數),上述流程數據也將是流程數據中的第一個,上面的鍵「1441-4731 -1-10/30/2017「將是第一個關鍵。

幫助?

回答

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 
+0

我試圖做到這一點,但是當我遇到下面的錯誤super_list = [秒,self.flowdata,鍵] 打印super_list.sort(鍵=拉姆達行:行[0]) 「 int'object not iterable or 'int'object unsubsrictpable or the program does run and I get 'None'一遍又一遍地重複。 – user1532369 2012-07-18 17:03:36

+0

@ user1532369:1.'super_list'應該是列表的列表,但是您只有一個列表代表單個行。排序單行是沒有意義的。 2.'super_list.sort()'不返回值,它只是重新排列列表。如果你想在不改變原始的情況下得到一個排序列表,可以使用'sorted(super_list)'代替。 – interjay 2012-07-18 17:09:20

+0

因爲我有這樣的結構「[[1509321600],['1','-1','4','7','7','1','-8','-14', '-24','-29','-25','-24','-9','-4','0','0','-5','-10',' - 6','-5','-13'],'1441-4731-1-10/30/2017']「重複多次。你知道我可以如何將它改爲這種格式[[秒1,流數據1,鍵1],[秒2,流數據2,鍵2],...]:如上所述,我可以對其進行分類? – user1532369 2012-07-27 08:04:53

0

你可以壓縮列表到一個元組,然後進行排序元組的列表,然後解壓縮與元組列表理解,就像這樣:

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

其中秒,flowdata,鑰匙,和zipped_tuple與超越列表理解沒有範圍的任意名稱。