python - 有没有办法对元组列表进行排序?
问题描述
我想对这个列表进行排序:
[('alpha', 2), ('delta', 3), ('charlie', 3), ('tango', 1), ('foxtrot', 1), ('echo', 2)]
结果应该是
[('charlie', 3), ('delta', 3), ('alpha', 2), ('echo', 2), ('foxtrot', 1), ('tango', 1)]
charlie 排在第一位是因为它的数字最大,并且领先于 delta,因为 c 按字母顺序排在 d 之前(因此,如果数字相同,它将按字母顺序对这些特定的数字进行排序)。alpha 在 echo 之前,因为即使它们具有相同的数字,a 按字母顺序排在 e 之前。echo 领先于 foxtrot,因为 echo 具有更大的数字,而 foxtrot 领先于 tango,即使它们具有相同的数字,因为 f 在 t 之前。
目前,我的方法涉及一个 for 循环(查看每个元素)内部的 while 循环(将项目移动到正确的位置),然后如果数字相同,则另一个循环执行相同的操作,因此它可以按字母顺序排序.
有没有更好的方法来做到这一点?
解决方案
您可以编写自己key
的传递给sorted
. 在这种情况下,首先按[1]
索引排序,但将其取反,以便获得降序。然后按名称按字母升序排序,即 index [0]
。
>>> sorted(values, key=lambda i: (-i[1], i[0]))
[('charlie', 3), ('delta', 3), ('alpha', 2), ('echo', 2), ('foxtrot', 1), ('tango', 1)]
推荐阅读
- javascript - 子域上的跨域 cookie 问题
- vue.js - Vue JS 填充数据时如何添加条件?
- javascript - 从一个文件扩展所有 Joi 验证包并使用 const Joi = require('joi') 导入所有
- machine-learning - 如何使用 k-means 聚类获得更多特征
- php - 多维数组的数组合并
- mongodb - 如何在 MongoDB 中关联两个集合
- c++ - 如何将 SCANF 与指向数组的指针一起使用?
- android - Android体系结构组件(LiveData):如何在更新文本视图后清除LiveData中的所有值
- reporting - 柱状数据库的维度建模
- kubernetes - 多容器 Pod 最佳实践