2012-06-05 285 views
0

我覺得這已經被問過了,但問題的答案對我的代碼沒有效果。Python:按字母順序對列表進行排序/分組

我想根據第一個列表[2]按字母順序對列表進行排序,然後在按列表[3]和列表[4]排序的匹配條目內進行排序等等。真正的數據是更大,在每個列表的詳細條目,但一個例子:

list = [ 
['X_campestris_vesicatoria', 'Bacteria', 'Proteobacteria', 
    'Gammaproteobacteria', 'Xanthomonadales', 'Xanthomonadaceae', 'Xanthomonas'], 
['Pantoea', 'Bacteria', 'Proteobacteria', 'Gammaproteobacteria', 
    'Enterobacteriales', 'Enterobacteriaceae', 'Pantoea'], 
['Acidobacterium', 'Bacteria', 'Acidobacteria', 'Acidobacteriales', 
    'Acidobacteriaceae', 'Granulicella'], 
['S_boydii', 'Bacteria', 'Proteobacteria', 'Gammaproteobacteria', 
    'Enterobacteriales', 'Enterobacteriaceae', 'Shigella']] 

我已經嘗試了一些事情,類似的問題有作爲的答案:

taxlist.sort(key = lambda row: (row[2],row[3],row[4],row[5])) 
print taxlist 

但沒有排序發生。

同樣與當我嘗試:

sorted(taxlist, key=lambda x: (x[2],x[3],x[4],x[5])) 
print taxlist 

而且一旦列表排序我仍然可以使用這個或者是列表中不再迭代?

import csv 
writer = csv.writer(sys.stdout, delimiter="\t") 
writer.writerows(taxlist) 

感謝您的任何幫助。

+1

你的例子適用於我,既有排序又有排序。 – badzil

+0

您可能也可以使用:'key = lambda x:x [2:]'作爲排序關鍵字。 – mgilson

回答

0

sorted給你一個新的列表,而L.sort排序L到位。在這兩種情況下,原始列表仍然可以訪問並且可以迭代。

即使你使用sorted,舊列表仍然可以訪問,並且可以迭代。返回的列表也可以訪問,並且可以迭代。

希望可以幫到