繁体   English   中英

针对特定列对列表进行排序

[英]Sort list of lists with respect to specific columns

可以说我有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)

我最好在此基础上建立。

如果子列表的一个值在列表的所有子列表中相同,则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个的值相等时,在第三索引(即第二个键 )上使用排序的方式是那些情况。

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

因此,仅使用无任何键的普通排序功能。

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

也可以看看文档 [重点]:

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

但是,如果您需要选择特定的列来定义排序顺序,则建议对key函数使用operator.itemgetter()

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中使用什么排序元素,即2nd,3rd元素都是(x[1],x[2])

如果只处理数字,则可以排序:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM