对特定列排序列表列表

时间:2014-12-18 16:42:17

标签: python list sorting conditional-statements

假设我有3种维生素含有C-维生素和D-维生素

ls = [[100,50],[100,49],[100,64]]

巧合的是,这些维生素都具有相同数量的C-维生素。因此,我想对第二种情况(D-维生素)进行排序。我怎么做到这一点?我做了一些研究,发现这是一个例子:

mylist = sorted(mylist, key=itemgetter('name', 'age'))

但是,我不明白它是如何工作的或原因。我已经使用带有helpmethods的类和这一行完成了关于一个条件的列表排序:

ls.sort(key=Vitamin.get_cVitamin, reverse=True)

我最好想要建立......

3 个答案:

答案 0 :(得分:5)

如果子列表的一个值在列表的所有子列表中都相同,则sorted()方法默认按其他值排序,即不同的值。您不需要使用lambda

演示:

>>> ls = [[100,50],[100,49],[100,64]]
>>> sorted(ls)
[[100, 49], [100, 50], [100, 64]]
>>> ls = [[50,100],[49,100],[64,100]]
>>> sorted(ls)
[[49, 100], [50, 100], [64, 100]]

按多个键排序:

>>> ls=[["kfajksa",100,20,40],["jsaof",120,32,94],["skajd",120,28,94],["jhsgd",120,32,84]]
>>> sorted(ls, key=lambda x:(x[2],x[3]))
[['kfajksa', 100, 20, 40], ['skajd', 120, 28, 94], ['jhsgd', 120, 32, 84], ['jsaof', 120, 32, 94]]

此处列表首先按照第二个索引排序,即第一个键,其中索引2上的值相等,索引第3个,即第二个键用于排序在那些情况下。

答案 1 :(得分:2)

默认情况下,标准排序会考虑所包含列表的其他列。

因此,只使用没有任何键的普通排序功能。

ls = [[100,50],[100,49],[100,64]]
ls.sort()
# ls is sorted w.r.t. all "columns": [[100, 49], [100, 50], [100, 64]]

另请查看documentation [强调我的]:

  

序列类型也支持比较。 特别是,通过比较相应的元素,按字典顺序比较元组和列表。这意味着要比较相等,每个元素必须比较相等,并且两个序列必须是相同类型且具有相同的长度。 (有关完整详细信息,请参阅语言参考中的Comparisons。)

如果您需要选择特定列来定义排序顺序,建议您使用operator.itemgetter()作为key功能。

答案 2 :(得分:1)

ls.sort(key=lambda x: x[1],reverse=True)
print(ls)

[[100, 64], [100, 50], [100, 49]]

要按第二个元素断开连接的第一个元素排序,您将使用以下内容:

ls.sort(key=lambda x: (x[0],x[1]),reverse=True)

你想要排序的任何元素你会在lambda中使用,即第二个,第三个元素将是(x[1],x[2])

如果您只处理数字,可以进行排序:

ls = [[100,50],[100,49],[100,64]]
ls.sort(reverse=True)