假设我有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)
我最好想要建立......
答案 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)