2017-02-20 101 views
1

我有一個Python列表中的列表列表。我需要根據最低級別中的一個值對最高級別的列表進行排序。排序列表的列表蟒蛇Python

對於玩具模型,用列表small,這是包含將與每三個項目清單首次創建我的列表:

small = [["dog", 5, 6], ["cat", 391, 130], ["pig", 45, 2]...]` 

然後有一個較大的列表,large,即通過附加創建小單和其他項目一起:

large.append([["category 1"], small])` 

這是在一個循環中完成,所以如果循環有5計數器,它會通過創建一個列表small 5次,每次一個函數出發,追加它對李st large

我的目標是根據最小列表中的元素(包含small列表的列表)對最終列表進行排序。我目前正在逐行打印large列表,其中small列表按照index 1的列表排列(請參閱:順序5,10,15,順序1,3,6等),所以我的輸出最小的

>category 1: 
    >['Dog', 5, 6] 
    >['Pig', 10, 2] 
    >['Cat', 15, 130] 
    >['Buffalo', 20, 1] 
    >['Newt', 25, 45] 

    >category 2: 
    >['Newt', 1, 1092] 
    >['Cat', 3, 352] 
    >['Pig', 6, 34] 
    >['Buffalo', 9, 12] 
    >['Dog', 12, 5] 

    >category 3: 
    >['Buffalo', 2, 12] 
    >['Pig', 4, 37] 
    >['Cat', 6, 34] 
    >['Newt', 8, 150] 
    >['Dog', 10, 52] 

但是,我想打印順序large列表index 1中,構成了最小的數組列表中的元素看時,最大的:是這樣的。所以,我的理想輸出會是這樣:

>category 2: 
    >['Newt', 1, 1092] 
    >['Cat', 3, 352] 
    >['Pig', 6, 34] 
    >['Buffalo', 9, 12] 
    >['Dog', 12, 5] 

    >category 3: 
    >['Buffalo', 2, 12] 
    >['Pig', 4, 37] 
    >['Cat', 6, 34] 
    >['Newt', 8, 150] 
    >['Dog', 10, 52] 

    >category 1: 
    >['Dog', 5, 6] 
    >['Pig', 10, 2] 
    >['Cat', 15, 130] 
    >['Buffalo', 20, 1] 
    >['Newt', 25, 45] 

我試圖與itemgetter()排序,然而,與itemgetter()排序large的時候,我只能在列表large的項目,這是[category x][[a,b,c], [a,b,c]]排序。有沒有辦法訪問itemgetter的最低級別的元素?或另一種方式去分揀這個清單?

謝謝。

+2

先把它寫成一個正常的循環,然後看看如何使它更簡單或更高效。 –

+0

嵌套索引? '大[i] [j] [1]' – f5r5e5d

回答

2

這可以在一行內完成:

sorted_large = sorted(large, key=lambda item: item[1][0][1]) 

sorted內置函數採用一個key參數:

key指定用於提取 一個參數的函數的每個列表元素的比較鍵

使用lambda表達式,可以提取排序關鍵字。

+0

這是完美的,我嘗試了很多類似的東西,但沒有得到正確的語法..謝謝! – Rene