如何解决如何在python中对列表元素进行排序?
列表中有 4 个词典:
mylist = [{'name': 'c','age': 21},{'name': 'b','age': 20},{'name': 'd',{'name': 'a','age': 20}]
如果我想按年龄排序,那么我应该使用:
mylist.sort(key= lambda psn: psn['age'])
然后输出将是:
mylist = [{'name': 'b',{'name': 'c','age': 21}]
现在!如果我想按“年龄”对这个列表进行排序,但如果有任何相同的年龄,那么我只按姓名对这些人进行排序怎么办? 在这个列表中,'a' 和 'b' 具有相同的年龄。 'c' 和 'd' 也有相同的年龄。那么我如何按“年龄”对这个列表进行排序,但如果有任何相同的年龄按“姓名”排序? (按字母顺序)
应该是这样的:
mylist = [{'name': 'a','age': 21}]
解决方法
使用 key
函数的 sorted
参数。要先按 age
再按 name
排序,您可以返回一个 tuple
,如下所示:
>>> list = [{'name': 'c','age': 21},{'name': 'b','age': 20},{'name': 'd',{'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'},'name': 'd'}]
>>>
顺便说一句,为您的变量 list
使用不同的名称,因为它会隐藏内置的 list
。
如果您还想再考虑名称,只需返回元组(我使用单词 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 在利用部分排序对数据进行多轮排序时也能很好地工作(例如,如果您想按降序按第二个键排序并且复合键是不是那么容易获得)。它甚至是排序文档中的 recommended pattern:
lst.sort(key=itemgetter("name"))
lst.sort(key=itemgetter("age")) # stable wrt first run
请注意,您按照与优先级相反的顺序进行轮次。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。