如何在python中对列表元素进行排序



列表中有4个字典:

mylist = [{'name': 'c', 'age': 21}, {'name': 'b', 'age': 20}, {'name': 'd', 'age': 21}, {'name': 'a', 'age': 20}]

如果我想按年龄排序,那么我应该使用:

mylist.sort(key= lambda psn: psn['age'])

则输出为:

mylist = [{'name': 'b', 'age': 20}, {'name': 'a', 'age': 20}, {'name': 'c', 'age': 21}, {'name': 'd', 'age': 21}]

现在!如果我想按年龄对这个列表进行排序,但如果有相同的年龄,那么我只按名字对这些人进行排序呢?在这个列表中,"a"one_answers"b"的年龄相同。而且"c"one_answers"d"也有相同的年龄。那么,我怎么能按"年龄"对这个列表进行排序,但如果有相同的年龄,我该按"姓名"对它们进行排序?(按字母顺序(

应该是这样的:

mylist = [{'name': 'a', 'age': 20}, {'name': 'b', 'age': 20}, {'name': 'c', 'age': 21}, {'name': 'd', 'age': 21}]

如果您还想其次考虑名称,只需返回tuple(我使用单词arr而不是list(:

sorted(arr, key=lambda x: (x['age'],x['name']))

您可以制作一个复合密钥,例如使用operator.itemgetter使其更具可读性:

from operator import itemgetter
lst.sort(key=itemgetter("age", "name"))

Python的排序算法Timsort在利用部分排序对数据进行多轮排序时也能很好地工作(例如,如果你想按第二个键降序排序,而复合键不太容易获得,这将更相关(。这甚至是排序文档中推荐的模式:

lst.sort(key=itemgetter("name"))
lst.sort(key=itemgetter("age"))  # stable wrt first run

请注意,您按优先级的相反顺序进行循环。

使用sorted函数的key参数。要先按age排序,然后按name排序,可以返回一个tuple,类似于以下内容:

>>> list = [{'name': 'c', 'age': 21}, {'name': 'b', 'age': 20}, {'name': 'd', 'age': 21}, {'name': 'a', 'age': 20}]
>>> sorted(list, key=lambda x:  (x['age'],x['name']))
[{'age': 20, 'name': 'a'}, {'age': 20, 'name': 'b'}, {'age': 21, 'name': 'c'}, {'age': 21, 'name': 'd'}]
>>>

顺便说一句,请为变量list'使用不同的名称,因为它会隐藏内置的list

最新更新