2017-02-20 135 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