列表列表列表Python

时间:2017-02-20 20:44:45

标签: python algorithm list sorting

我在python中有一个列表列表。我需要根据最低级别中的一个值对最高级别的列表进行排序。

对于玩具模型,我的列表首先使用列表small创建,列表包含列表,每个列表包含三个项目:

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

然后有一个更大的列表large,它是通过将小列表和另一个项目附加在一起而创建的:

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

这是在一个循环中完成的,所以如果循环的计数器为5,它将继续通过一个函数创建一个列表small 5次,每次都将它附加到列表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()进行排序,但是,在使用largeitemgetter()进行排序时,我只能对列表large中的项目进行排序,这些项目为[category x] }和[[a,b,c], [a,b,c]]。有没有办法访问itemgetter的最低级元素?或者另外一种方法来排序这个清单?

感谢。

1 个答案:

答案 0 :(得分:2)

这可以在一行中完成:

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

sorted内置函数采用key参数:

  

key指定用于提取a的一个参数的函数   每个列表元素的比较键

使用lambda表达式,可以提取排序键。